CMake “TARGET_LINK_LIBRARIES ne peut pas trouver-lfoo” mais c'est dans le même répertoire que d'une autre bibliothèque

Comme mentionné ci-dessus j'ai des problèmes avec la compilation de mon projet c++ (en utilisant CMake) qui utilise des bibliothèques dynamiques (.donc).
Il y a 3 libs dans mon répertoire (c'est à dire home/sources/lib/). Quand je ne fais qu'informer le compilateur (dans le fichier CMake) pour utiliser la première lib ( foo1.so ), il fonctionne (uniquement ce fichier, l'ordre n'a pas d'importance). Mais il ne fonctionne pas avec tout les autres libs (foo2.so et foo2.so). Tous les 3 fichiers ont le .afin d'extension.

Remarque: Le répertoire et les noms de fichiers ont été modifiés, mais la structure est la même.
Les bibliothèques que j'utilise n'ont pas été compilées /créé par moi et sont d'un 3ème partie. (il n'aurait pas d'importance quand ils sont cassés, le serait-il?)


Et c'est ainsi que ma CMake fichier ressemble à ceci:

cmake_minimum_required(VERSION 3.3)
project(MyProj)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -m64")
INCLUDE_DIRECTORIES("/home/sources/include")
LINK_DIRECTORIES("/home/sources/lib")

set(SOURCE_FILES main.cpp)
add_executable(MyProj ${SOURCE_FILES})

TARGET_LINK_LIBRARIES(MyProj foo1.so)

La modification de la ligne ci-dessus à cela ne fonctionne plus:

TARGET_LINK_LIBRARIES(MyProj foo1.so foo2.so foo3.so)

Juste une autre façon de l'écrire (n'aide pas)

TARGET_LINK_LIBRARIES(MyProj foo1.so)
TARGET_LINK_LIBRARIES(MyProj foo2.so)
TARGET_LINK_LIBRARIES(MyProj foo3.so)

Et comme mentionné ci-dessus: TOUS les 3 bibliothèques sont dans le MÊME répertoire (j'entends avec LINK_DIRECTORIES)

Et c'est l'erreur que je reçois lorsque vous essayez de compiler avec les autres libs (comme l'a dit que foo1.so travaux):

[ 50%] Linking CXX executable MyProj
/usr/bin/ld: cannot find -lfoo2
/usr/bin/ld: cannot find -lfoo3
collect2: error: ld returned 1 exit status
make[3]: *** [MyProj] Error 1
make[2]: *** [CMakeFiles/MyProj.dir/all] Error 2
make[1]: *** [CMakeFiles/MyProj.dir/rule] Error 2
make: *** [MyProj] Error 2

P. S.: j'ai fait quelques recherches avant de poster ici, mais ne trouvez pas tout otherone avec cette "étrange" problème. Et pour sûr, je ne serais pas venu si loin avec mon fichier CMake sans quelques recherches sur google compétences ^^

  • Probablement, foo2.so et foo3.so ont un format incorrect pour la plate-forme donnée, tandis que foo1.so est bon. Vous pouvez utiliser file de commande pour chacun d'entre eux et de comparer la production.
  • Merci pour ces conseils (ne pensez pas à la file de commande...). Mais ils sont les mêmes: foo3.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=..., stripped foo2.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=..., stripped foo1.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=..., stripped