3

node.js 用の C++ モジュールをプログラミングしようとしています。ノードはビルダーとして waf を使用しています。

ライブラリ「sigar」が存在するかどうか、構成を確認したい。私がやろうとしていること:

def configure(conf):
    conf.check_cxx(lib='sigar')

「node-waf configure」を実行すると、次のメッセージが表示されます。

Checking for library sigar               : not found 

しかし libsigar.so は存在します:

# whereis libsigar
libsigar: /lib64/libsigar.so

「libsigar」ライブラリをインストールした後、ldconfig も実行しました。node モジュールは、エラーなしでコンパイル、リンク、および動作します。libm、libboost_system などの他のライブラリは configure で見つけることができます。

誰かが私が間違っていることを教えてもらえますか? *.so をライブラリ パスにコピーして ldconfig を実行する以外に、ライブラリをインストールするために何か特別なことはありますか?

助けてくれてありがとう。

4

1 に答える 1

5

自力で解決しました。-vvv オプションを指定して configure を実行すると、非常に詳細な出力が得られます。

20:31:48 runner system command -> ['/usr/bin/g++', 'Release/test_1.o', '-o', '/home/reeaal/workspace/hwmonitor/build/.conf_check_0/testbuild/Release/testprog', '-Wl,-Bdynamic', '-lsigar']

プログラムを再コンパイルしようとしたとき、リンカ エラーが発生しました。これは本当に役に立ちました。

g++ test.cpp -Bdynamic -lsigar
/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../lib64/libsigar.so: undefined reference to `dlsym'
/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../lib64/libsigar.so: undefined reference to `dlopen'
/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../lib64/libsigar.so: undefined reference to `dlclose'
collect2: ld returned 1 exit status

libsigar をチェックする前にリンカー フラグを追加すると、問題が解決しました。

conf.env.append_value('LINKFLAGS', '-ldl')
于 2012-02-05T19:46:31.560 に答える