c++ - g++ 链接问题 : undefined reference to functions

标签 c++ linker g++ makefile eclipse-cdt

我使用 CMake 和 Visual C++ 构建了 HyDE 库。然后,仍然在 VC++ 中,我能够成功地创建代码并构建链接到 HyDE.lib 和 HyDE 头文件的可执行文件。

然后我发现,为了与我公司的其他人一起工作,最好在 Eclipse CDT 中进行开发。由于对 Eclipse CDT 知之甚少,我创建了一个默认的 hello world 项目,删除了代码,然后将我的所有代码转储到 src 文件夹中。然后我尝试更改包含和 lib 路径和 libs 以反射(reflect)在 VC++ 中工作的内容。此时一切似乎都可以编译,但我在链接时遇到错误:

/cygdrive/c/EclipseWorkspace/425HyDE/Debug/../src/FS5HyDE.cpp:16: undefined reference to `HyDEAPI::HyDE::HyDE(HyDESystemModel::SystemModel*, bool)'

(还有很多这样的错误,都指的是 HyDE 方法。)这是在命令行运行的:

g++ -L"C:\Progra~1\boost\boost_1_42\lib" -L"C:\EclipseWorkspace\HyDE" -o"425HyDE.exe" ./src/Adapter_FS5HyDE.o ./src/EPSCommands.o ./src/EPSCurrentSensor.o ./src/EPSFault.o ./src/FS5HyDE.o ./src/HyDEObservation.o ./src/MCDH.o ./src/MCDH_Module.o ./src/PDBComponent.o ./src/PowerSystem.o ./src/Program.o ./src/SSPCComponent.o ./src/Telemetry.o ./src/TelemetryReport.o -l:libboost_thread-vc90-mt-gd-1_42.lib -lHyDE

这绝对不是库排序问题,因为我也有其他排序(只有两个)。有没有可能是用VC++(使用Windows编译器)编译HyDE.lib和用g++编译我的程序有问题? Eclipse CDT 自动生成 makefile 的方式是否存在问题?还有其他想法吗?

(注意:似乎还有很多关于 SO 的其他问题也有类似的问题,但在阅读它们之后我还没有找到解决我的问题的问题。)

最佳答案

典型的缺失符号错误。哪个源文件定义:

HyDEAPI::HyDE::HyDE(HyDESystemModel::SystemModel*, bool)' ?

这个文件是否添加到编译中?你能在粘贴的命令行中发现它吗?

如果这个符号属于外部库,在使用 -L 添加目录路径后,您可以使用 -l 添加要与您的程序链接的特定库的名称

我建议您尝试在编译命令中添加 HyDE.lib 的目录路径,紧接着是库名称,如下所示:

 -L"C:\path_to_hyde_library" -l:HyDE.lib

然后告诉我们发生了什么。

关于c++ - g++ 链接问题 : undefined reference to functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3515770/

相关文章:

c++ - 在原始图像中的组件周围显示矩形

c++ - 生成随机位的最快方法

ios - Unity转Xcode错误: Apple Mach-O Linker (ld) Error Group

c++ - 使用 clang 强制对 constexpr 进行编译时间评估

c++ - SWIG:如何将 boost::shared_ptr 包装到 std::vector?

c++ - 将枚举转换为 int

c++ - 奇怪的场景得到 g++ 错误函数的多重定义

c++ - #ifndef#define 指令是什么意思

c - 如何链接Scintilla?

qt - Mac OS X下安装和使用QWT