【问题标题】:g++ linking issues: undefined reference to functionsg++ 链接问题:未定义的函数引用
【发布时间】:2010-08-18 19:12:56
【问题描述】:

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

然后我发现,为了与我公司的其他人一起工作,最好使用 Eclipse CDT 进行开发。由于对 Eclipse CDT 知之甚少,我创建了一个默认的 hello world 项目,删除了代码,然后将所有代码转储到 src 文件夹中。然后我尝试更改包含和库路径和库以反映在 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++(使用 Windows 编译器)中编译 HyDE.lib 并用 g++ 编译我的程序是否可能存在问题? Eclipse CDT 自动生成生成文件的方式是否存在问题?还有其他想法吗?

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • -L"C:\EclipseWorkspace\HyDE" 和 -lHyDE 在上面的帖子中应该按你说的做。我也试过-l:HyDE.lib。结果相同。
    • 您是否能够在命令行上进行链接 - 无需 Eclipse。链接是否适用于您使用的任何命令行?您可以尝试的另一件事是 -l"complete library path including lib name"
    • @Gandahar 我无法使用相同的命令在命令行上进行链接。也使用 -l"full path" 不起作用。使用 -l"full cygwin path" 不起作用。
    • 我正在构建 425HyDE.exe 并链接到 HyDE.lib
    【解决方案2】:

    解决方案:由于 HyDE 库是使用 Visual Studios 编译器编译的,并且我正在尝试使用 Cygwin 工具链构建链接到它的代码,因此两个编译器使用不同的名称修饰方案,因此后一个链接器无法找到HyDE 库中的预期符号。我发现的唯一解决方案是使用 Cygwin 工具链重新编译 HyDE 库使用 Visual Studios 使用的任何编译器编译新代码。 (咕咕咕咕)

    【讨论】:

      【解决方案3】:

      ./src/FS5HyDE.o./src/HyDEObservation.o如果其他目标文件(*.o文件)需要应该是最新的参数,表示最需要的@987654323 @ 应尽可能出现在参数列表的最后。

      【讨论】:

        猜你喜欢
        • 2013-02-03
        • 1970-01-01
        • 2013-01-01
        • 1970-01-01
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多