当我尝试在 64 位 linux (debian) 机器上使用 cmake 和 gcc 构建此项目时,链接器出现错误:
Linking C executable ../../../../cpsadamsx
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlopen'
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlclose'
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlerror'
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlsym'
collect2: ld returned 1 exit status
make[2]: *** [cpsadamsx] Error 1
make[1]: *** [sundials/examples/cpodes/serial/CMakeFiles/cpsadamsx.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
显然 dlopen、dlclose、dlerror 和 dlsym 是对 libdl.so 的引用。我在 /lib64/libdl.so.2 中有那个库,但为什么找不到呢?
会不会是一个普通的 './configure; 制作; make install'-path 我可以设置 LIBS 变量并发出这样的配置命令(我认为):
export LIBS=-ldl && ./configure
但是我现在该怎么做呢?
更新:
所以似乎找到了(或至少一个)库,但不包含有问题的符号。也许它尝试使用 /lib 中的 32 位库?
有没有办法反汇编 /lib64/libdl.so.2 以确保它确实有引用 dlopen 等?
现在问题似乎将构建工具引导到库的正确版本。