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

标签 c++ sdl sdl-2

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/

相关文章:

c++ - OpenGL GLM 矩阵计算不起作用

C 重新分配错误 : malloc(): invalid size (unsorted)

c++ - SDL_Event->key.keysym.sym 符号键(冒号、双引号、问号……)

c++ - 在 Mac OS X .framework 中包含 GLEW 的正确方法是什么?

c - sdl_gl_setattribute 上的 sdl 应用程序段错误

c++ - 如何使用 SDL2_TTF 渲染高质量的单色文本?

c++ - SDL2 - 从表面创建纹理的问题(屏幕截图)

c++ - 并行 for 循环体的最佳大小

c++ - 在 .cpp 中的类主体外部定义内联函数

c++ - 如何测试某些代码不能用 C++ 编译?