2

シンプルなメイクファイルでライブラリブーストとカールをリンクする際に問題があります。単一のコマンドを使用する場合:

g++ -I /usr/lib/boost/include -L /usr/lib/boost/lib website.cpp website.h main.cpp data.cpp data.h -lboost_regex -lcurl

すべて問題ありませんが、メイクファイルを使用すると

a.out: website.o data.o main.o
    g++ -L /usr/lib/boost/lib -lboost_regex website.o data.o main.o -o a.out -lcurl 
data.o: data.cpp data.h
    g++ -c data.cpp -o data.o
website.o: website.cpp website.h
    g++ -I /usr/lib/boost/include -c website.cpp -o website.o 
main.o: main.cpp
    g++ -c main.cpp -o main.o

私は多くのエラーがあります:

g++ -c main.cpp -o main.o 
g++ -L /usr/lib/boost/lib -lboost_regex website.o data.o main.o -o a.out -lcurl
website.o: In function boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)':
website.cpp:(.text._ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j[boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)]+0x22): undefined reference to `boost::basic_

私はwebsite.cppでboostとcurlを使用しています(もちろん見出しはwebsite.hにあります)。

4

1 に答える 1

7

問題は、最後にある単一のコマンドとは異なり、コンパイラ コマンドの s の-lboost_regex前に配置されていることです。.o-lboost_regex

変化する:

g++ -L /usr/lib/boost/lib -lboost_regex website.o data.o main.o -o a.out -lcurl

に:

g++ -L/usr/lib/boost/lib website.o data.o main.o -o a.out -lcurl -lboost_regex

順序が重要な理由については、GCC リンク オプションを参照してください。

于 2012-09-20T10:49:05.203 に答える