2011-12-05 9 views
4

私は書いたライブラリを使って簡単なテストアプリケーションをコンパイルしようとしています。これは他のマシン上でコンパイルして正常に動作します。リンカはシンボルを解決できないと言いますが、そこにはありますか?

libroller.soは/ usr/libにあります。私は、次のようなmain.cppにコンパイルしています:それはのような多数のエラーを訴える

g++ -g3 -Wall -I"../../" -lrt -lroller -o rap main.o 

:しかし

/....../main.cpp:51: undefined reference to `Log::i(char const*, ...)' 

、私は、これらがこのように存在することを知っている:

nm -Ca /usr/lib/libroller.so | grep "Log::i"    
00000000001f5d50 T Log::i(char const*, ...) 
0000000000149530 W Log::i(std::string const&) 

両方とも64ビットです:

file /usr/lib/libroller.so   
/usr/lib/libroller.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped 

file main.o 
main.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped 

Unl ike GCC and ld can't find exported symbols...but they're there!私はこれらのシンボルが定義されていることを確信しています。同じ.soは同じシンボルのいくつかを使って別のものと動作します。

EDIT/ANSWER:オブジェクトの順序が重要です。ライブラリの前にmain.oを置く必要がありました。私はリンカーがmain.oに到達するまで対処しなければならない未解決のシンボルがないと推測しています。これはリストの最後のオブジェクトです。私はまだ、これは何ヶ月も他のマシンで働いていた理由として少し混乱しています...

+1

あなたの質問は[this one] [1]のdupであり、同じ回答があります。 [1]:http://stackoverflow.com/questions/8380087/boost-1-48-linking-issue-with-gcc-4-6-1 –

+0

ありがとう。私は検索した、私は約束:) "未解決"と "gcc"を検索無関係の答えのLOTSを... – notlesh

+0

[GCCでライブラリをリンクする順序でエラーが発生することがあるのはなぜですか?](https: //stackoverflow.com/questions/45135/why-does-the-order-in-which-libraries-are-linked-sometimes-cause-errors-in-gcc) –

答えて

3

変更:

g++ -g3 -Wall -I"../../" -lrt -lroller -o rap main.o 

へ:

g++ -g3 -Wall main.o -lroller -lrt -o rap 

リンク順事項(および-Iこの場合は冗長です)。

1

あなたの質問はthis oneのDUPで、同じ答えを持っていますリンク線mattersのライブラリの順序。

関連する問題