我使用 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/