cross platform - mueble - Proyecto de construcción que involucra a cmake, ¿cómo hago para que esté al tanto de las bibliotecas?
como se dice biblioteca en inglés (3)
Cuando intento construir este proyecto con cmake y gcc en una máquina Linux de 64 bits (debian), recibo un error del enlazador:
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....
Aparentemente dlopen, dlclose, dlerror y dlsym son referencias a libdl.so. Tengo esa biblioteca en /lib64/libdl.so.2, pero ¿por qué no se encuentra?
Hubiera sido una configuración ''./ normal; hacer; make install''-path Pude haber configurado la variable LIBS y emitido el comando configure de esta manera (creo):
export LIBS=-ldl && ./configure
¿Pero cómo lo hago ahora?
ACTUALIZAR:
Parece que la biblioteca (o al menos una) se encuentra, pero no contiene los símbolos en cuestión. Tal vez lo intente con la biblioteca de 32 bits en / lib?
¿Hay alguna manera de desensamblar /lib64/libdl.so.2 para asegurarse de que tenga las referencias dlopen, etc.?
El problema ahora parece guiar las herramientas de compilación a la versión correcta de la biblioteca.
Probablemente necesites agregar target_link_libraries () - ver el texto del enlace
Como esta pregunta se muestra en Google y ambas respuestas no apuntan a la solución correcta, aquí está:
En su CMakeLists.txt, agregue ${CMAKE_DL_LIBS}
para enlazar con idl. Debe ser similar a esto:
target_link_libraries(ExpandableTest
${CMAKE_DL_LIBS}
Expandable
ExpandableTestLibrary
)
Agregue esto en CMakeLists.txt y debería funcionar:
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ldl")