2010-08-18 111 views
2

我用CMake和Visual C++来构建HyDE库。然后,仍然在VC++中,我能够成功创建代码并构建可链接到HyDE.lib和HyDE头文件的可执行文件。g ++链接问题:对函数的未定义引用

然后我发现为了和我公司的其他人一起工作,最好在Eclipse CDT中开发。对于Eclipse CDT知之甚少,我创建了一个默认的hello world项目,删除了代码,然后将所有代码转储到src文件夹中。然后我试图改变includes和lib路径和库以反映VC++中的工作。在这一点上似乎一切编译,但是我在联得到一个错误:

/cygdrive/c/EclipseWorkspace/425HyDE/Debug/../src/FS5HyDE.cpp:16:未定义的引用`HyDEAPI: :海德::海德(HyDESystemModel :: SystemModel *,布尔)”

(有很多这样的更多的错误,都指海德方法。)下面是在命令行中运行:

g ++ -L“C:\ Progra〜1 \ boost \ boost_1_42 \ lib”-L“C:\ EclipseWorkspace \ HyDE”-o“425HyDE.exe”./src/Adapter_FS5HyDE.o ./src/EPSC ommands.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是否会自动生成makefiles,这会不会有问题?任何其他想法?

(注:似乎有很多其他问题上的SO类似的问题,但通过他们看完之后,我还没有找到一个解决我的问题)

回答

1

解决方案:由于HyDE库是使用Visual Studios编译器编译的,我试图使用Cygwin工具链构建与其链接的代码,因此两个编译器使用不同的名称修改方案,以便后者的链接程序找不到HyDE库中的预期符号。我找到的唯一解决方案是使用Cygwin工具链重新编译HyDE库使用Visual Studios正在使用的任何编译器编译新代码。 (发牢骚抱怨)

1

经典缺少符号错误。哪个源文件定义:

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

该文件是否已添加到汇编?你能在你粘贴的命令行上看到它吗?

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

我会建议你尝试添加到编辑命令HyDE.lib的目录路径,紧跟库名,如:

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

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

+0

-L“C:\ EclipseWorkspace \ HyDE”和上面的帖子中的lHyDE *应该*按照你说的去做。我也试过-l:HyDE.lib。同样的结果。 – JnBrymn 2010-08-18 19:26:48

+0

您是否能够在命令行上链接 - 没有日食。链接是否可以与您使用的任何命令行一起工作?你可以尝试的另外一件事是-l“包括lib名称的完整库路径” – Gangadhar 2010-08-18 19:41:10

+0

@Gandahar我无法使用相同的命令在命令行上进行链接。还使用-l“完整路径”不起作用。使用-l“完整的cygwin路径”不起作用。 – JnBrymn 2010-08-18 19:56:04

0

./src/FS5HyDE.o./src/HyDEObservation.o应该是最新的参数,如果其他目标文件(* .o文件)需要他们来说,这意味着最需要object files应该出现在去年尽可能在参数列表中。

+0

对不起,那没用。 – JnBrymn 2010-08-18 19:51:48

相关问题