在OS X Mavericks中从C链接C
作者:互联网
转换到OS X Mavericks和XCode 5.0.1后,我再也无法优雅地将已编译的C文件(从gcc输出)链接到C项目(从g输出).
从我的makefile生成的令人讨厌的命令对是:
gcc `pkg-config --cflags glib-2.0` -g -Wall -O3 `pkg-config --cflags flann` -c -o vec.o vec.c
g++ `pkg-config --cflags glib-2.0` -g -Wall -O3 -stdlib=libstdc++ -lstdc++ layoutquality.cpp vec.o `pkg-config --libs glib-2.0` -L/usr/local/Cellar/flann/1.8.4/lib -lflann -o layoutquality
链接器抱怨的是:
Undefined symbols for architecture x86_64:
“load_dmat(char const*)”, referenced from:
_main in layoutquality-I8HOqy.o
ld: symbol(s) not found for architecture x86_64
其中load_dmat只是文件vec.c中的一个函数.如果我在第一行用g替换gcc,那么所有内容都会编译并链接正常,但是clang说:
clang: warning: treating ‘c’ input as ‘c++’ when in C++ mode, this behavior is deprecated
是否有一种无害的,不推荐的编译和链接方式?在升级到OS X Mavericks和新的命令行工具之前,将g与gcc中的目标文件链接在一起工作正常.任何有关变化和如何前进的见解都会很棒,谢谢.
解决方法:
在“vec.c”之前添加“-x c”(不带引号)应修复它.
如果在同一行中编译多个.c / .cpp文件,则可以在每个C或C文件名列表之前使用“-x c”或“-x c”来适当地切换上下文.例如:
g++ -x c alpha.c beta.c -x c++ gamma.cpp
标签:c-3,c,clang,gcc,osx-mavericks 来源: https://codeday.me/bug/20191006/1861062.html