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。
答案 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