如何在c ++中构建一个包含SDL等主入口点的库

时间:2016-03-29 22:11:44

标签: c++ sdl sdl-2

SDL在其植入中有一个WinMain并声明了SDL_main函数。 用户可以定义该函数的主体以及运行的SDL库调用中的入口点。

我想用同样的实现来实现一个库。 那么我如何在c ++中构建一个包含入口点的库,并为用户提供一个函数的原型,然后像SDL一样被调用。

可能的实施可能是:

Lib.hpp:

#define Main lib_main
extern int lib_main ();

Lib.cpp:

#include "lib.hpp"

int main (){
    // the lib code runs here
    lib_main();
}

构建这个库后我可以这样使用:

的main.cpp

#include "lib.hpp"
int Main(){
    // The user code
}

我无法使用该命令编译Lib.cpp:

g ++ -shared lib.cpp -o Lib.dll -Wl, - out-implib,libLib.a

它为我提供了一个未定义的lib_main()参考。

我正在使用Windows。

1 个答案:

答案 0 :(得分:3)

您没有指定您的平台,但如果您使用GCC,则代码可以正常运行。

编译静态库,如下所示:

g++ -c -o Lib.o Lib.cpp
ar rcs libLib.a Lib.o

像这样编译主程序:

g++ -L. -lLib -o main main.cpp

为* nix编译共享库,如下所示:

g++ -shared -o libLib.so Lib.cpp

像这样编译主程序:

g++ -L. -lLib -o main main.cpp

为Windows编译共享库和导入库,如下所示:

g++ -shared -o libLib.dll --Wl,--out-implib,libLib_dll.a Lib.cpp

像这样编译主程序,链接导入库并将当前目录添加到运行时搜索路径:

g++ -L. -lLib_dll -Wl,-rpath,. -o main main.cpp