其他分享
首页 > 其他分享> > 在OS X Mavericks中从C链接C

在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