2017-11-01 18 views
0

私はUbuntu 14.04を使用しており、すでにlibmysqlclient-devパッケージをインストールしました。しかし、私は常にmysql_initシンボルがないので、リンクエラーが発生します。 次のように私のソースコード、Makefileには、実行時の結果とシンボル情報は、次のとおりです。libmysqlclient.aをリンクできません。

[email protected]/~/project/m01/uuid_sign>cat main.cpp 
#include <cstdio> 
#include <cstdlib> 
#include "mysql/mysql.h" 
int main(int argc,char** argv) 
{ 
    auto con = mysql_init(nullptr); 
    //printf("mysql client version : %s\n",mysql_get_client_info()); 
    exit(EXIT_SUCCESS); 
} 


[email protected]/~/project/m01/uuid_sign>LANG= && make -B 
g++ -o main.o -c main.cpp -std=c++11 -ggdb 
g++ -o uuid_sign -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -ldl main.o 
main.o: In function `main': 
/home/igsrd/project/m01/uuid_sign/main.cpp:6: undefined reference to `mysql_init' 
collect2: error: ld returned 1 exit status 
make: *** [uuid_sign] Error 1 


[email protected]/~/project/m01/uuid_sign>nm -C /usr/lib/x86_64-linux-gnu/libmysqlclient.a | grep mysql_init 
0000000000002b10 T mysql_init 
0000000000002d30 T mysql_init_character_set 
       U mysql_init_character_set 

ソースは非常に簡単です、ただmysql_init()を呼び出すための1行を。 プロセスにコンパイラとリンカーのオプションがすべて表示されているので、欠落しているオプションはありません。

エラーメッセージには、エラーをリンクするundefined referenceあるので、私はmysql_initをgrepするためにlibmysqlclient.aをダンプし、それが未定義の状態ではありません。

今私は本当に分かりません。これには何が問題なのですか?

答えて

0
は、この(main.oの位置を変更)してみてください、あなたの2番目のコマンドを変更して

:私はそれを得た

g++ -o uuid_sign main.o -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -ldl 
+0

を、私は右、ライブラリーまず、その後、私のオブジェクトファイルをリンクする必要がありますか? – naive231

関連する問題