2

私の端末セッションから:

Go Trojans >make all
g++ -static -I/usr/include/boost -I/usr/include/boost/filesystem get_sys_info.cpp
/tmp/cc6nK9EV.o: In function `__static_initialization_and_destruction_0(int, int)':
get_sys_info.cpp:(.text+0x13a): undefined reference to `boost::system::generic_category()'
get_sys_info.cpp:(.text+0x146): undefined reference to `boost::system::generic_category()'
get_sys_info.cpp:(.text+0x152): undefined reference to `boost::system::system_category()'
collect2: ld returned 1 exit status
make: *** [all] Error 1
Go Trojans >

Boost C++ ファイルシステム ライブラリをインポートする C++ コード:

#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>

// Include Boost C++ libraries
#include <boost/filesystem.hpp>
using namespace boost::filesystem;


using namespace std;

int main() {
    string my_str = "This is a string.";

    cout << my_str << endl;
/*
    my_str = system("pwd");
    my_str.append("\b\b\b\b\b\b\b\b extra");
    cout << my_str << "a\b\b\b\b\b\b=" << endl;
*/

    path p(".");
    cout << p << "==" << endl;



    return 0;
}

Boost C++ ライブラリが配置されているディレクトリでのターミナル セッションのスニペット。

Go Trojans >pwd
/usr/include/boost
Go Trojans >ls -al
total 1308
drwxr-xr-x  86 root root 12288 Jan 29 09:30 .
drwxr-xr-x 119 root root 20480 Feb  4 08:08 ..
...
drwxr-xr-x   5 root root  4096 Jan 29 09:30 filesystem
-rw-r--r--   1 root root  1340 Jan  5  2012 filesystem.hpp

未定義の参照を解決するにはどうすればよいですか? Boost C++ ファイルシステム ライブラリを正しくインポートしていますか? 私もコードを正しくコンパイルしていますか?

私の間違いは何ですか?よろしくお願いします。

どうもありがとうございました。素晴らしい一日を!チャオ!

4

1 に答える 1

3

-L/path/to/your/library呼び出しの前でinを使用する必要があり-lboost_systemます。これは、共有オブジェクトの場所をコンパイラーに通知します。ただし、コードをコンパイルできたとしても、ランタイムがファイルを見つけることができないため、コードは実行されません。そのため、パスを更新する必要があります。

あなたは学校のコンピューターを使用していると思いますので、編集LD_LIBRARY_PATHや利用/sbin/ldconfigは違法です。

それらが違法でない場合は、次のいずれかを行うことができます

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/boost

あなた~/.bashrcまたは同等のもので

またはあなたができる

touch /etc/ld.so.conf.d/boost.conf

vi /etc/ld.so.conf/boost.conf

ここにBoostライブラリへのパスを入力し、ファイルを保存します。次に、以下を実行します。

/sbin/ldconfig

これにより、すべてが再解析され/etc/ld.so.conf.d、ランタイムパスが更新されます。

幸運を!

于 2013-02-06T14:00:53.733 に答える