如何正确地 link 针对库编程

How correctly to link program against library

我 运行 ./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我link库simgrid中是这样的:

target_link_libraries(CSim2Sim simgrid)

为什么 myprogram 仍然 link 反对 SimGrid 3.13.0(它不存在于 /usr/libSimGrid 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

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

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

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