如何正确地将程序与库链接起来

时间:2016-08-01 14:39:49

标签: shared-libraries dynamic-linking ldd

我运行./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时它不存在?

更新

ternimal中的命令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

1 个答案:

答案 0 :(得分:1)

该消息似乎有问题,看起来您的应用程序实际上是使用3.13.0编译的,并链接到libsimgrid 3.13.90。订单在邮件中被颠倒了,我会修复它。

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

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