gpt4 book ai didi

c++ - 在 OS X Mavericks 中从 C++ 链接 C

转载 作者:可可西里 更新时间:2023-11-01 15:38:14 26 4
gpt4 key购买 nike

在转换到 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 中的一个函数。如果我在第一行中将 gcc 替换为 g++ ,那么一切都可以正常编译和链接,但是 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++ - 在 OS X Mavericks 中从 C++ 链接 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19644816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com