我使用CMake和Visual C ++来构建HyDE库。然后,仍然在VC ++中,我能够成功创建代码并构建一个链接到HyDE.lib和HyDE头文件的可执行文件。
然后我发现,为了与我公司的其他人合作,最好在Eclipse CDT中进行开发。我很少了解Eclipse CDT,我创建了一个默认的hello world项目,删除了代码,然后将我的所有代码转储到src文件夹中。然后我试图改变包含和lib路径和库,以反映在VC ++中工作的内容。此时一切似乎都在编译,但我在链接时遇到错误:
/ cygdrive / c / EclipseWorkspace / 425HyDE / Debug /../ src / FS5HyDE.cpp:16:对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 ++中编译HyDE.lib(使用Windows编译器)并使用g ++编译我的程序时出现问题? Eclipse CDT自动生成makefile的方式有问题吗?还有其他想法吗?
(注意:在类似的问题上似乎还有很多其他问题,但在阅读完之后我还没有找到解决我问题的问题。)
答案 0 :(得分:1)
经典缺失符号错误。哪个源文件定义:
HyDEAPI::HyDE::HyDE(HyDESystemModel::SystemModel*, bool)'
?
此文件是否已添加到编辑中?你能在你粘贴的命令行上发现它吗?
如果此符号属于外部库,则在使用-L
添加目录路径后,您可以使用-l
添加要与程序链接的特定库的名称。
我建议您尝试在编译命令中添加HyDE.lib的目录路径,紧接着是库名,如下所示:
-L"C:\path_to_hyde_library" -l:HyDE.lib
然后告诉我们发生了什么。
答案 1 :(得分:1)
解决方案:由于HyDE库是使用Visual Studios编译器编译的,并且我正在尝试使用Cygwin工具链构建链接到它的代码,因此两个编译器使用不同的名称修改方案,以便后一个链接器找不到HyDE库中的预期符号。我发现的唯一解决方案是使用Cygwin工具链重新编译HyDE库或使用Visual Studios正在使用的任何编译器编译新代码。 (叽叽喳喳抱怨)
答案 2 :(得分:0)
./src/FS5HyDE.o
和./src/HyDEObservation.o
应该是最新参数,这意味着最需要的object files
应尽可能在参数列表中出现。