【问题标题】:Ubuntu 11.10: GCC/G++ won't link librariesUbuntu 11.10:GCC/G++ 不会链接库
【发布时间】:2012-01-19 21:33:13
【问题描述】:

我去编译我的一个项目,它使用了 SDL、SDL_ttf、OpenAL 和 GTK。所有这些都输出如下错误:

TxtFunc.cpp:(.text+0x61): undefined reference to `TTF_OpenFont'
TxtFunc.cpp:(.text+0x8c): undefined reference to `TTF_RenderText_Solid'
TxtFunc.cpp:(.text+0xf6): undefined reference to `SDL_UpperBlit'
TxtFunc.cpp:(.text+0x108): undefined reference to `TTF_CloseFont'
TxtFunc.cpp:(.text+0x114): undefined reference to `SDL_FreeSurface'

对于每个库调用。我正在使用以下链接选项进行编译:

sdl-config --libspkg-config gtk+-2.0 --libspkg-config openal --libs-lalut -lSDL_ttf

我已经安装了所有这些软件包,并且没有“找不到文件”错误。只是很多未定义的引用......这没有意义,所以我写了一个快速测试应用程序:

#include "SDL/SDL.h"

int main()
{
    SDL_Init(SDL_INIT_VIDEO);
    return 0;
}

然后像这样编译:

g++ `sdl-config --libs --cflags` -o sdl-test ./sdl-test.cpp

我什至尝试直接链接到“/usr/lib/libSDL-1.2.so.0”或“/usr/lib/libSDL.a”

所有这些选项最终都有相同的输出:

/tmp/cc05XT8U.o: In function `main':
sdl-test.cpp:(.text+0xa): undefined reference to `SDL_Init'
collect2: ld returned 1 exit status

有人有什么想法吗?

【问题讨论】:

    标签: gcc ubuntu linker g++ sdl


    【解决方案1】:

    通常,您需要在命令行上使用符号的文件之后设置 -l 选项。也许尝试将sdl-config --libs --cflags 移动到命令的末尾?即对于您的测试程序:

    g++ -o sdl-test ./sdl-test.cpp `sdl-config --libs --cflags`
    

    【讨论】:

    • OP 可能还想阅读这个解释为什么命令行上的库顺序很重要:webpages.charter.net/ppluzhnikov/linker.html
    • 就是这样!谢谢!我想我从来不知道这很重要,只是碰巧写对了!受雇的俄罗斯人:是的,这确实很有意义!再次感谢大家!
    【解决方案2】:

    呸,哪个小笨蛋想出了将编译器更改为现在依赖于命令行中选项顺序的想法?

    嗯,这也解决了我的问题,只是在我的 Makefile 中的 ($OBJS) 之后移动了 ($CFLAGS),我所有与 SDL 库的未知引用的链接问题都消失了 >.

    【讨论】:

      【解决方案3】:

      如果你使用 SDL_ttf,你需要

      g++ main.cpp -o sdl-test `sdl-config --libs --cflags` -lSDL_ttf
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多