g ++链接问题:未定义的函数引用

时间:2010-08-18 19:12:57

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

我使用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的方式有问题吗?还有其他想法吗?

(注意:在类似的问题上似乎还有很多其他问题,但在阅读完之后我还没有找到解决我问题的问题。)

3 个答案:

答案 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)

如果其他目标文件(* .o文件) 需要

./src/FS5HyDE.o./src/HyDEObservation.o应该是最新参数,这意味着最需要的object files应尽可能在参数列表中出现。