2017-05-17 1 views
1

Aus irgendeinem unbekannten Grund verschwand mein libmysqlclient.a in meinem CentOS 7. Mein Programm bekam dann Linkerfehler und sagte, dass libmysqlclient nicht gefunden werden kann.welche lib zu verwenden? libmariadbclient oder libmysqlclient?

Und dann entdeckte ich, dass meine mysql-devel Paket gegangen ist:

yum info mysql-devel 
yum install mysql-devel 

Hier ist die Antwort:

Loaded plugins: fastestmirror 
Loading mirror speeds from cached hostfile 
* base: repo.virtualhosting.hk 
* epel: mirror.pregi.net 
* extras: repo.virtualhosting.hk 
* updates: repo.virtualhosting.hk 
Package MariaDB-devel-10.2.5-1.el7.centos.x86_64 already installed and latest version 

Deshalb denke ich, vielleicht sollte ich libmariadbclient stattdessen verwenden, aber wenn ich einen Link Mein Programm mit libmariadbclient, es hatte Verknüpfungsfehler:

/usr/lib64//libmariadbclient.a(openssl.c.o): In function `ma_tls_start': 
(.text+0x191): undefined reference to `CRYPTO_num_locks' 
/usr/lib64//libmariadbclient.a(openssl.c.o): In function `ma_tls_start': 
(.text+0x1aa): undefined reference to `CRYPTO_THREADID_set_callback' 
/usr/lib64//libmariadbclient.a(openssl.c.o): In function `ma_tls_start': 
(.text+0x1b6): undefined reference to `CRYPTO_set_locking_callback' 
/usr/lib64//libmariadbclient.a(openssl.c.o): In function `ma_tls_start': 
(.text+0x1bb): undefined reference to `SSL_library_init' 
/usr/lib64//libmariadbclient.a(openssl.c.o): In function `ma_tls_start': 
(.text+0x1c7): undefined reference to `SSL_load_error_strings' 
/usr/lib64//libmariadbclient.a(openssl.c.o): In function `ma_tls_start': 
(.text+0x1cc): undefined reference to `OPENSSL_add_all_algorithms_noconf' 
/usr/lib64//libmariadbclient.a(openssl.c.o): In function `ma_tls_end': 
(.text+0x2b4): undefined reference to `CRYPTO_set_locking_callback' 
/usr/lib64//libmariadbclient.a(openssl.c.o): In function `ma_tls_end': 
(.text+0x2bb): undefined reference to `CRYPTO_set_id_callback' 
/usr/lib64//libmariadbclient.a(openssl.c.o): In function `ma_tls_end': 
(.text+0x2df): undefined reference to `CRYPTO_num_locks' 
/usr/lib64//libmariadbclient.a(openssl.c.o): In function `ma_tls_end': 
(.text+0x340): undefined reference to `EVP_cleanup' 
/usr/lib64//libmariadbclient.a(openssl.c.o): In function `ma_tls_end': 
(.text+0x345): undefined reference to `CRYPTO_cleanup_all_ex_data' 
/usr/lib64//libmariadbclient.a(openssl.c.o): In function `ma_tls_end': 
(.text+0x34a): undefined reference to `ERR_free_strings' 
/usr/lib64//libmariadbclient.a(openssl.c.o): In function `ma_tls_end': 
(.text+0x351): undefined reference to `CONF_modules_free' 
/usr/lib64//libmariadbclient.a(openssl.c.o): In function `ma_tls_init': 
(.text+0x3e1): undefined reference to `SSLv23_client_method' 
/usr/lib64//libmariadbclient.a(openssl.c.o): In function `my_cb_threadid': 
(.text+0x1e): undefined reference to `CRYPTO_THREADID_set_numeric' 
/usr/lib64//libmariadbclient.a(ma_compress.c.o): In function `_mariadb_compress_alloc': 
(.text+0x5d): undefined reference to `compress' 
/usr/lib64//libmariadbclient.a(ma_compress.c.o): In function `_mariadb_uncompress': 
(.text+0x191): undefined reference to `uncompress' 
collect2: error: ld returned 1 exit status 

Ich habe l verwendet ibmysqlclient, um sich mit meiner MariaDB 10.1 zu verbinden, und kürzlich versucht habe, es aus der Quelle zu erstellen, aber aufgrund von Problemen mit der OpenSSL 1.1-Version gescheitert. Hier sehen Sie meine anderen Posten für sie:

Error "incomplete type MD5_CONTEXT" with MariaDB 10.2 and Openssl 1.1.0e

Also ich bin verwirrt, warum mysqlclient.a verschwunden und welche lib sollte ich verwenden.

Kann jemand helfen?

Danke!

Antwort

1

ich ähnliches Problem hatte, wenn versucht, mein Programm mit "-lmariadbclient" (nach dem apt-get -lmysqlclient gestoppt aktualisieren arbeiten) zu kompilieren. Das Makefile ich verwendet wurde:

g++ -std=c++11 *.cpp ../common/*.cpp ../common/*.c -o myprogram -I.. -ldl -Wstack-protector -fstack-protector-all -pthread -ggdb -lssl -lcrypto -lz -lmariadbclient -Wwrite-strings -fPIC 

ich gelesen, dass Befehle „-lssl -lcrypto lz“ hinzugefügt werden müssen, um diese Fehler zu beheben, aber ich habe sie an der falschen Stelle (vor lmariadbclient). Als ich sie hinzugefügt, nachdem „-lmariadbclient“ konnte ich endlich mein Programm kompilieren:

g++ -std=c++11 *.cpp ../common/*.cpp ../common/*.c -o myprogram -I.. -ldl -Wstack-protector -fstack-protector-all -pthread -ggdb -lmariadbclient -Wwrite-strings -lssl -lcrypto -lz -fPIC 

UPDATE 2017.07.22:

ich vor kurzem versucht, mein Programm auf dem neuen Linux Mint zu kompilieren 18.2. Leider war ich die gleichen Kompilierungsfehlern bekommen, und ich war nicht in der Lage es mit dem alten Verfahren zu beheben:

MariaDB Version:

mysql --version 
mysql Ver 15.1 Distrib 10.2.7-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2 

Kompilieren Fehler:

/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmariadbclient.a(openssl.c.o): In function `ma_tls_start': 
(.text+0x189): undefined reference to `CRYPTO_num_locks' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmariadbclient.a(openssl.c.o): In function `ma_tls_start': 
(.text+0x1a4): undefined reference to `CRYPTO_THREADID_set_callback' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmariadbclient.a(openssl.c.o): In function `ma_tls_start': 
(.text+0x1b0): undefined reference to `CRYPTO_set_locking_callback' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmariadbclient.a(openssl.c.o): In function `ma_tls_start': 
(.text+0x1b5): undefined reference to `SSL_library_init' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmariadbclient.a(openssl.c.o): In function `ma_tls_start': 
(.text+0x1c1): undefined reference to `SSL_load_error_strings' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmariadbclient.a(openssl.c.o): In function `ma_tls_start': 
(.text+0x1c6): undefined reference to `OPENSSL_add_all_algorithms_noconf' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmariadbclient.a(openssl.c.o): In function `ma_tls_end': 
(.text+0x2a4): undefined reference to `CRYPTO_set_locking_callback' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmariadbclient.a(openssl.c.o): In function `ma_tls_end': 
(.text+0x2ab): undefined reference to `CRYPTO_set_id_callback' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmariadbclient.a(openssl.c.o): In function `ma_tls_end': 
(.text+0x2cf): undefined reference to `CRYPTO_num_locks' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmariadbclient.a(openssl.c.o): In function `ma_tls_end': 
(.text+0x330): undefined reference to `EVP_cleanup' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmariadbclient.a(openssl.c.o): In function `ma_tls_end': 
(.text+0x335): undefined reference to `CRYPTO_cleanup_all_ex_data' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmariadbclient.a(openssl.c.o): In function `ma_tls_end': 
(.text+0x33a): undefined reference to `ERR_free_strings' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmariadbclient.a(openssl.c.o): In function `ma_tls_end': 
(.text+0x33f): undefined reference to `CONF_modules_free' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmariadbclient.a(openssl.c.o): In function `ma_tls_init': 
(.text+0x3c1): undefined reference to `SSLv23_client_method' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmariadbclient.a(openssl.c.o): In function `my_cb_threadid': 
(.text+0x1e): undefined reference to `CRYPTO_THREADID_set_numeric' 

ich es geschafft, es zu beheben durch Ändern von "-lmariadbclient" zu: "-lmariadb". Danach konnte ich mein Programm fehlerfrei kompilieren. Ich bin mir nicht sicher, ob diese Lösung für alle arbeiten, aber es lohnt sich :)

Meine letzte Makefile zu versuchen:

g++ -std=c++11 *.cpp ../common/*.cpp ../common/*.c -o myprogram -I.. -ldl -Wstack-protector -fstack-protector-all -pthread -ggdb -lmariadb -Wwrite-strings -lssl -lcrypto -lz -fPIC 

Viel Glück!

+0

Ich habe versucht, bevor irgendetwas zu setzen -lmariadbclient, aber immer noch die Linkfehler haben. – kchkg

+1

Kenji, hast du alle Abhängigkeiten installiert? Ich denke, es ist: "libssl-dev", "openssl-devel" und "libz-dev". – Mona

+0

Mona, ich kann libssl-dev nicht installieren/finden, aber ich bin mir sicher, dass ich openssl-devel und libz-dev – kchkg

Verwandte Themen