【问题标题】:How correctly to link program against library如何正确地将程序与库链接
【发布时间】:2016-08-01 14:39:48
【问题描述】:

我运行./myprogram,它给了我一个警告:

Warning: Your program was compiled with SimGrid version 3.13.90, and then linked against SimGrid 3.13.0. Proceeding anyway.

尝试ldd myprogram,它会给出以下结果:

libsimgrid.so.3.13.90 => /usr/lib/libsimgrid.so.3.13.90 (0x00007f338ef47000)  

然后我去usr/lib并在终端输入ll *sim*

lrwxrwxrwx 1 ken ken       21 июл 28 19:29 libsimgrid.so -> libsimgrid.so.3.13.90*
-rwxrwxr-x 1 ken ken 12307480 июл 28 19:29 libsimgrid.so.3.13.90*

CMakeLists.txt我以这种方式链接库simgrid

target_link_libraries(CSim2Sim simgrid)

为什么myprogram 仍然链接到SimGrid 3.13.0(它在/usr/lib 中不存在,而SimGrid 3.13.90 存在)?

更新

命令locate libsimgrid.so 在终端给出:

/home/ken/Downloads/simgrid-master/lib/libsimgrid.so
/home/ken/Downloads/simgrid-master/lib/libsimgrid.so.3.13.90
/home/ken/SimGrid/lib/libsimgrid.so
/home/ken/SimGrid/lib/libsimgrid.so.3.13.90
/usr/lib/libsimgrid.so
/usr/lib/libsimgrid.so.3.13.90

【问题讨论】:

    标签: shared-libraries dynamic-linking ldd


    【解决方案1】:

    消息似乎有问题,看起来您的应用程序实际上是用 3.13.0 编译的,并链接到 libsimgrid 3.13.90。消息中的顺序颠倒了,我会解决的。

    我认为,当您编译代码时,您的包含可能有问题。请检查您在编译应用程序时没有使用旧版本的 msg.h/simgrid_config.h 文件(可能 /usr/include 中还有一个?)。

    要检查,您可以在 simgrid_config.h 中查找 SIMGRID_VERSION_PATCH。最近应该是 90,而不是 0。

    【讨论】:

      猜你喜欢
      • 2017-01-28
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 2012-06-02
      • 2023-04-01
      相关资源
      最近更新 更多