SDL 在其实现中有一个 WinMain 并声明了 SDL_main 函数。 用户可以定义该函数的主体,SDL 库中的入口点调用该函数。
我想用相同的实现来实现一个库。 那么我如何在 C++ 中构建一个包含入口点的库,并为用户提供一个函数原型(prototype),以便在定义之后像 SDL 一样调用。
一个可能的实现可能是:
库.hpp:
#define Main lib_main
extern int lib_main ();
库.cpp:
#include "lib.hpp"
int main (){
// the lib code runs here
lib_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() 的 undefined reference 。
我正在使用 Windows。
最佳答案
您没有指定您的平台,但如果您使用的是 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
关于c++ - 如何在 C++ 中构建包含主要入口点(如 SDL)的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36296040/