在MinGW中手动链接标准库

时间:2017-06-05 04:49:24

标签: c mingw ld

我在让MinGW识别CSFML库方面遇到了一些麻烦。我不得不使用链接器手动链接每个库。现在我没有从简单的gcc调用中自动链接的标准库。

bbroo@DESKTOP-1F1J3SM ~/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

1 个答案:

答案 0 :(得分:1)

使用' ld'在不明显。由于gcc成功编译了您的项目,您可以直接使用' ld'重现链接阶段。执行以下步骤。

  1. 使用' gcc'添加-v选项。这将生成大量文本,您可能希望将其重定向到带有' 2> out'
  2. 的文件
  3. 找到以' COLLECT_GCC_OPTIONS ='
  4. 开头的最后一行
  5. 在此行之后会有一个gcc选项列表,用于调节< ld'的行为。从这一行中提取以下内容:两个指向主库文件夹和gcc特定库文件夹的-L选项;之后是一系列使用过的对象模块和库。将这些复制到您的' ld'命令行。名单相当大。 对象和库的顺序很重要!
  6. 以下是成功链接简单测试程序的示例命令行:

    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文件复制到您的文件夹或添加路径并添加库。