OS X上的Gcc:体系结构x86_64的未定义符号

new*_*mer 5 c macos gcc

我正在编写一个具有多个子目录的应用程序.我创建了一个Makefile结构,以便子目录编译文件并执行"ar rvs"和"ranlib libxxx.a"以创建存档到父目录中进行链接.

但是"ld"命令遇到以下问题.

ld: warning: ignoring file ./libxxx.a, file was built for archive which is not
the architecture being linked (x86_64):
./libxxx.a Undefined symbols for architecture x86_64:
Run Code Online (Sandbox Code Playgroud)

我在Mac OS X 10.10.1上使用gcc

我读了很多帖子.我试过"gcc -arch i386",然后我遇到了i386的同样错误

Undefined symbols for architecture i386:
Run Code Online (Sandbox Code Playgroud)

我安装了gcc-4.9.2并尝试使用它而不是默认的gcc,没有运气.我尝试使用x86_64-apple-darwin14.0.0-g ++ - 4.9.2,这也没有帮助.

Jon*_*ler 2

您看到的错误意味着您在构建中混合了 i386 和 x86_64 代码,并且需要保持一致。除非有令人信服的理由不这样做(我很想知道它是什么),否则您应该只编译 64 位的所有内容。在 Mac 上使用时gcc,这通常是默认设置,但您可以通过-m64向编译添加标志来强制使用它。CC="gcc -m64"一种方法是在命令行上设置make;还有其他更好的方法,但具体取决于您的makefile内容。

\n\n

解决方法:首先,删除您在项目区域中构建的所有库和目标代码(make clean如果您编写了目标,则可能会执行 \xe2\x80\x94 操作clean)。CC然后,调整或其标志的值(CFLAGS最终,但如何CFLAGS构建取决于makefile),以便强制执行 64 位编译。然后确保您在所有编译中都使用它。如果您没有看到-m64,则说明您遇到了问题。

\n\n

如果必须使用 32 位,请-m32替换-m64.

\n\n

上面的讨论假设您正在使用gcc来运行ld命令。如果不是,那么在您用来gcc运行该ld命令之前,您将只能靠自己。在我看来,你的生活中有比弄清楚如何ld正确运行命令更重要的事情要做;我当然有。

\n