C++ 如何在c++;它包含像SDL这样的主入口点

C++ 如何在c++;它包含像SDL这样的主入口点,c++,sdl,sdl-2,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 cod

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
g++ -L. -lLib -o main main.cpp

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

g++ -shared -o libLib.so Lib.cpp
按如下方式编译主程序:

g++ -L. -lLib -o main main.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

intmain(){…}
将扩展为
intlib_Main();(){…}
。。。可能需要在Lib中更新您的
#define
。hppIt可以使用构建标志,但除此之外,您已经回答了自己的问题。不要这样做。SDL也不应该这么做。这使得同时使用几个库对你的用户来说是一个巨大的痛苦,他们会讨厌你。谢谢你的回答。我试过了,效果很好。但事情是这样的。当我执行以下命令来创建共享和静态库时:g++-c Lib.cpp g++-shared-o Lib.dll Lib.o-Wl,--out implib,libliblib.a g++main.cpp-o main-L.-lLib它只编译.a和实际的主程序,而不编译.dll。程序无法执行,因为没有dll文件。您知道其中的区别吗?看起来您正在尝试构建静态库和共享库。确保不会将静态库与共享库的导入库混淆。检查我的最新答案。