【问题标题】:g++: After Ubuntu distro upgrade, none of my code will linkg++:Ubuntu发行版升级后,我的代码都不会链接
【发布时间】:2012-05-22 09:15:56
【问题描述】:

我正在将 eclipse CDT 用于一个大型 C++ 项目,该项目已经编译了 2 年。大约 2 周前,我开始遇到一些奇怪的段错误,这些段错误毫无意义,似乎 gtk 不知何故被破坏了。所以既然是时候升级发行版了,我决定从 11.04 升级到 12.04。现在,什么都不会链接。我拥有的每个依赖项都会在链接时引发未定义的引用错误。一切都编译得很好,所有 pkg​​-config 命令都返回了它们应该返回的内容。

有什么想法吗?

命令如下:

  Invoking: GCC C++ Linker g++ `pkg-config libv4l2 --libs` `pkg-config --libs alsa` -lmysqlcppconn -lboost_regex `pkg-config sigc++-2.0 --libs` `pkg-config gstreamer-0.10 --libs` `pkg-config gstreamer-app-0.10 --libs` `pkg-config gstreamer-interfaces-0.10 --libs` `pkg-config gstreamer-rtp-0.10 --libs` `pkg-config glib-2.0 --libs` `pkg-config gtk+-2.0 --libs` -lX11 -ldl -lXext  `pkg-config gdkmm-2.4 --libs` `pkg-config glib-2.0 --libs` `pkg-config gtkmm-2.4 --libs` `pkg-config ptlib --libs` `pkg-config opal --libs` -fexceptions -o"HHPVideoServer"  ./HHPVideoCodec.o ./engine.o  ./opal/GstEndPoint.o ./opal/Linux_GstEndPoint.o ./opal/opal-call-manager.o  ./logging/log.o  ./gui/HHPVideoCodecGui.o ./gui/misc.o  ./framework/services.o  ./StreamEngine/GSTMediaStream.o ./StreamEngine/HHPStreamingEndPoint.o ./StreamEngine/HHPStreamingProtocol.o ./StreamEngine/Linux_GstMediaStream.o  ./SDKEngine/AudioSettings.o ./SDKEngine/CallSettings.o ./SDKEngine/ClientSocket.o ./SDKEngine/Communications.o ./SDKEngine/DeviceInfo.o ./SDKEngine/FileActions.o ./SDKEngine/MediaCodecs.o ./SDKEngine/NetworkSettings.o ./SDKEngine/OSDSettings.o ./SDKEngine/SDKEngine.o ./SDKEngine/SDKEngineCore.o ./SDKEngine/SIPAccount.o ./SDKEngine/ServerSocket.o ./SDKEngine/SessionScheduleDisplay.o ./SDKEngine/Socket.o ./SDKEngine/VideoInput.o  ./DigitalIO/DigitalIOCore.o ./DigitalIO/DigitalInputEngine.o   
./HHPVideoCodec.o: In function `HHPVideoCodec':
/home/jonathan/workspace/HHPVideoServer/Debug/../HHPVideoCodec.cc:9: undefined reference to `PProcess::PProcess(char const*, char const*, unsigned short, unsigned short, PProcess::CodeStatus, unsigned short, bool)'
/home/jonathan/workspace/HHPVideoServer/Debug/../HHPVideoCodec.cc:9: undefined reference to `PTimedMutex::PTimedMutex()'
/home/jonathan/workspace/HHPVideoServer/Debug/../HHPVideoCodec.cc:9: undefined reference to `PTimedMutex::PTimedMutex()'
/home/jonathan/workspace/HHPVideoServer/Debug/../HHPVideoCodec.cc:9: undefined reference to `PTimedMutex::~PTimedMutex()'
/home/jonathan/workspace/HHPVideoServer/Debug/../HHPVideoCodec.cc:9: undefined reference to `PProcess::~PProcess()'....

它持续了数千行,每个库都有一个未定义的引用。

【问题讨论】:

  • 不使用 Eclipse 可以从命令行编译和链接吗?一个简单的“你好,世界”程序怎么样?向我们展示一个最小的示例和确切的错误消息。
  • 请复制确切的错误消息并将其粘贴到您的问题中。我们需要知道未定义的符号是什么。 (另外,您可以尝试在网上搜索该符号名称 - 其他人可能也遇到过同样的问题)。
  • @KeithThompson 不,它也不能从命令行工作。 (Eclipse 无论如何都在使用 make 文件)。此外,一个简单的程序编译和链接很好。
  • @user9876 我添加了链接器命令。这是我从 glib 到 gstreamer 尝试过的每一个符号

标签: c++ ubuntu g++ debian ld


【解决方案1】:

库(作为 pkg-config 的输出)应列在 .o 文件之后。链接器的参数顺序很重要。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多