2017-01-16 20 views
0

共有ライブラリにサードパーティのコードをコンパイルしようとしているので、ctypesを使用してPythonから呼び出すことができます。これは故意に共有ライブラリで作業しています。私は共有ライブラリ構築しようと次に共有ライブラリをコンパイルするときのリンクエラー

gcc -c -fPIC -o elisa3-lib.o ../elisa3-lib.c 
gcc -c -fPIC -o usb-comm.o ../usb-comm.c 

gcc -shared -fPIC -Wl,-install_name,libelisa3.so -o libelisa3.so.1.0 elisa3-lib.o usb-comm.o -lc 

をそしてusbcomm.c参照がlibusb.hので、私はリンカエラーを取得:

は、私が使用してオブジェクトコードをビルド

#ifdef __APPLE__ 
    #include </opt/local/include/libusb-1.0/libusb.h> 
#endif 

エラーのある場合:

Undefined symbols for architecture x86_64: 
    "_libusb_bulk_transfer", referenced from: 
     _usb_send in usb-comm.o 
     _usb_receive in usb-comm.o 
    "_libusb_claim_interface", referenced from: 
     _openCommunication in usb-comm.o 
    "_libusb_close", referenced from: 
     _closeCommunication in usb-comm.o 
    "_libusb_exit", referenced from: 
     _closeCommunication in usb-comm.o 
    "_libusb_init", referenced from: 
     _openCommunication in usb-comm.o 
    "_libusb_open_device_with_vid_pid", referenced from: 
     _find_nrf_device in usb-comm.o 
    "_libusb_release_interface", referenced from: 
     _closeCommunication in usb-comm.o 
ld: symbol(s) not found for architecture x86_64 

正しくリンクするにはどうすればよいですか?共有ライブラリにlibusbをコンパイルし、-lとリンクする必要がありますか?

答えて

1

"未定義シンボル"は、リンカーが見つけることができない関数/変数です。一言で言えば、あなたがリンクしているライブラリやオブジェクトのいずれかとしてlibusbをインクルードする必要があります。どちらか簡単な方が適切です。

+1

はい、これのように動作させることができました: gcc -shared -fPIC -Wl、-install_name、libelisa3.so -o libelisa3.so elisa3-lib.o usb-comm.o -L/opt /ローカル/ lib -lusb-1.0 – user1336958

+0

恐ろしい!うれしいことがうまくいった –

関連する問題