【问题标题】:ld: symbol(s) not found for architectureld:未找到架构的符号
【发布时间】:2014-12-13 23:36:51
【问题描述】:

首先我想说我意识到这已经被问了十几次了,而且我已经阅读了无数的解决方案,没有任何运气,所以我再问一次。

我正在使用 OS X Mavericks 10.9.5,使用 Sublime 3 编写并使用带有 g++ 的终端进行编译

我正在尝试编译这个简单的文件 (test.cpp)

#include <iostream>
#include <SDL2/SDL.h>

int main () {
    if(SDL_Init(SDL_INIT_VIDEO)) {
    std::cout << "I made it this far" << std::endl;
    }
    return 0;
}

编译行:

g++ test.cpp

这会返回错误:

Undefined symbols for architecture x86_64:
    "_SDL_Init", referenced from:
         _main in test-ebbae4.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

所以,我尝试添加很多不同的标志,-m32 只会将结果更改为 throw Undefined symbols for architecture i386: 和 ld: symbol(s) not found for architecture i386

我尝试了不同的-arch 变体,但我似乎无法让它发挥作用。也玩过-l -I 标志,但我不确定我知道他们做什么/他们如何提供帮助..

有人知道下一步该做什么吗?

EDIT :一些附加信息。我已经尝试使用 SDL2 的 .framework,它没有改变任何东西,目前我正在使用通过源代码编译安装的 SDL2。标头位于usr/local/SDL2

【问题讨论】:

    标签: c++ macos g++ x86-64 sdl-2


    【解决方案1】:

    g++ test.cpp

    您也应该指定 SDL 库:

    g++ test.cpp -lsdl2

    如果编译器驱动程序不知道路径,您可能需要包含路径:

    g++ test.cpp -L/path/to/the/library -lsdl2


    【讨论】:

    • 我猜 /path/to/the/lib 是 usr/local/lib/,因为这个文件夹包含一堆文件,通常以 libSDL2.a/dylib 上的某些变体命名。还是我弄错了?但是,当我运行g++ test.cpp -L /usr/local/lib/ -lsdl 时,我得到ld: library not found for -lsdl 所以我想我又犯了一个错误。我确实意识到这对于刚接触 C++ 的人来说是深水,但这确实是我遇到的第一个错误,现在我已经投入了 8 个小时,所以很高兴得到它.. -跨度>
    • 睡了几个小时。我只需要将其更改为 -lsdl2。至少可以说,这具有教育意义。我会在您的答案中添加一个编辑并将其标记为正确答案。谢谢!
    猜你喜欢
    • 2019-10-03
    • 2013-11-18
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    相关资源
    最近更新 更多