如何在 C++ 中构建包含主要入口点(如 SDL)的库

How to build a library in c++ that contains the main entry point like SDL

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。

您没有指定您的平台,但如果您使用的是 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