Maison > Questions et réponses > le corps du texte
J'ai installé le serveur MySQL en utilisant la distribution source standard (mysql-server-8.0) selon : https://dev.mysql.com/doc/refman/8.0/en/installing-source-distribution.html. Dans un but précis, je suis dans la bibliothèque mysql-server-8.0/sql/mysqld.cc
中的MySQL源代码中添加了一些代码,并且我添加的代码使用了/usr/lib
中的自定义.so
.
Je voulais créer un lien vers cette bibliothèque lors de la création du code source MySQL, donc lorsque j'ai construit MySQL, j'ai utilisé la commande suivante :
cmake .. -DWITH_BOOST=/home/ubuntu/mysql-server-8.0/boost \ -DCMAKE_C_FLAGS="-lmy_lib_name -L/usr/lib" \ -DCMAKE_CXX_FLAGS="-lmy_lib_name -L/usr/lib" \ -DCMAKE_C_LINK_FLAGS="-lmy_lib_name -L/usr/lib" \ -DCMAKE_CXX_LINK_FLAGS="-lmy_lib_name -L/usr/lib" \ -DCONFIG_CLIENT_LIBS="-lmy_lib_name -L/usr/lib" \ -DCONFIG_LIBS_PRIVATE="-lmy_lib_name -L/usr/lib" \ -DCMAKE_EXE_LINKER_FLAGS="-lmy_lib_name -L/usr/lib" \ -DCMAKE_MODULE_LINKER_FLAGS="-lmy_lib_name -L/usr/lib" \ -DCMAKE_SHARED_LINKER_FLAGS="-lmy_lib_name -L/usr/lib" \ make
Bien que j'aie essayé d'ajouter le drapeau lors de la compilation et de la liaison, la construction n'a pas pu se terminer, rapporte error: undefined reference to 'symbols in my library'
. Existe-t-il un moyen de le faire fonctionner ? Merci!
P粉9767371012024-04-02 13:27:24
Merci pour votre commentaire ! J'ai trouvé que dans mon fichier .cc
源文件中没有正确使用C。应该注意的是,在 .cc
, l'utilisation du fichier d'en-tête C devrait ressembler à ceci :
extern "C" { #include "mylib.h" }
Le processus de liaison fonctionne donc correctement. Le compilateur n'a pas reconnu la signature de la fonction car j'ai abusé de l'en-tête de la bibliothèque dans le fichier .cc
.