2017-06-05 49 views
2

我在MinGW识别CSFML库时遇到了一些麻烦。我必须使用链接器手动链接每个库。现在我没有通过简单的gcc调用自动链接的标准库。在MinGW中手动链接标准库

[email protected] ~/Shaders 
$ ld shaders.o libcsfml-system.a libcsfml-window.a libcsfml-graphics.a csfml-system-2.dll csfml-window-2.dll csfml-graphics-2.dll 
shaders.o:shaders.c:(.text+0x10): undefined reference to `__main' 
shaders.o:shaders.c:(.text+0x4bc): undefined reference to `sleep' 

MinGW中的标准库的名称是什么,我如何链接到它在LD中?

我知道这并不回答这个问题,但这个编译工作:

gcc shaders.c libcsfml-system.a libcsfml-window.a libcsfml-graphics.a csfml-system-2.dll csfml-window-2.dll csfml-graphics-2.dll 
+0

编译时为什么不设置库搜索路径?我相信这个选项是'-L' – InternetAussie

+0

我已经尝试了很多选择,其他人都没有。 –

+2

使用'gcc'作为C程序的链接器 –

回答

1

在不明显使用“LD”。由于gcc成功编译了您的项目,您可以按照以下步骤直接使用'ld'重新创建链接阶段。

  1. 使用添加-v选项的'gcc'进行编译。这将产生大量的文本,你可能想重定向到文件'2> out'
  2. 找到最后一行以'COLLECT_GCC_OPTIONS ='开头
  3. 在这一行之后会有一个gcc选项列表它调节'ld'的行为。从这行提取以下内容:两个-L选项指向主库文件夹和特定于gcc的库文件夹;之后是一系列使用过的对象模块和库。将这些复制到你的'ld'命令行。该清单相当大。 对象和库的顺序很重要!

下面是示例命令行成功地链接简单的测试程序:

ld -Lc:\MinGW\lib\gcc\mingw32\5.3.0 -Lc:\MinGW\lib -o test.exe crt2.o crtbegin.o test.o -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt crtend.o 

您可能需要检查的路径,* .o文件复制到文件夹或路径添加到它们并添加库。