cmake lien de la bibliothèque partagée sur Windows
Il y a 3 fichiers [ m.c,m.h,principal.c ].
m.h
//m.h
int m();
m.c
//m.c
#include <stdio.h>
#include "m.h"
int m(){
printf("Hello,m!\n");
return 0;
}
principal.c
//main.c
#include "m.h"
int main(){
return m();
}
Tandis que je préfère bibliothèque partagée(m.dll), j'ai fait l'CMakeLists.txt
PROJECT("app1")
ADD_LIBRARY(m SHARED m.c)
ADD_EXECUTABLE(myexe main.c)
TARGET_LINK_LIBRARIES(myexe m)
CMake la configuration et généré fait. Ouverture app1.la sln et la construction avec Visual Studio, il se bloque, comme
LNK1104:Can't open file "Debug\m.lib"
Il ne fonctionne que comme STATIQUE à ADD_LIBRARY()
. Pourquoi ne pas travailler sur Windows?
Si j'ai eu une autre bibliothèque partagée(mylib.dll), comment pourrais-je invoquer ses fonctions dans ma main.c et CMakeLists.txt fichier?
Pouvez-vous préciser votre question et à supprimer les mots?
Je suis désolé, que je suis nouveau .Je vous remercie.
L'CMakeLists.txt fonctionne bien sur Ubuntu 14.04. libm.donc a généré.
Bienvenue sur StackOverflow. Avec juste un point de vue, la modification de votre code, vous pouvez y arriver. Voir ma réponse ci-dessous.
Je suis désolé, que je suis nouveau .Je vous remercie.
It always crashes
- est écrasé? CMake étape de configuration(cmake.exe
appel), l'étape de génération (BTW, quel outil utilisez-vous pour la construire? Visual Studio? Faire?) ou de l'exécution de l'exécutable? Ce message d'erreur vient avec cette plante?L'CMakeLists.txt fonctionne bien sur Ubuntu 14.04. libm.donc a généré.
Bienvenue sur StackOverflow. Avec juste un point de vue, la modification de votre code, vous pouvez y arriver. Voir ma réponse ci-dessous.
OriginalL'auteur llorch | 2015-10-11
Vous devez vous connecter pour publier un commentaire.
Il y a des différences entre la dynamique de la bibliothèque de liaison sur les différentes plates-formes qui demande un peu de code supplémentaire. La bonne nouvelle, c'est que CMake peut vous aider avec ceci. J'ai trouvé ce blog par Gernot Klingler très utile:
En bref vous avez besoin d'une exportation préfixe" défini pour tout ce qui est déclaré dans
m.h
. Sinon, le processus de construction ne générera pas d'une "bibliothèque d'importation" pour la liaison statique nommém.lib
(voir aussiCMAKE_IMPORT_LIBRARY_SUFFIX
).Voici votre code avec les modifications nécessaires:
m.h
m.c
CMakeLists.txt
Références Supplémentaires
Je suis désolé, que je viens de trouver sur le bouton accepter maintenant.
CMAKE_IMPORT_LIBRARY_SUFFIX
aidé. Merci.OriginalL'auteur Florian
À l'aide de WINDOWS_EXPORT_ALL_SYMBOLS pourrait aider. Introduction l'article pour plus de détails. En bref, invoquer CMake comme ceci:
OriginalL'auteur Dženan