2011-12-04 31 views
2

私はリンクプログラムにコマンドを与えています:EclipseのC++プロジェクトにプログラムをリンクするには? Linuxの

g++ -o prog_name prog_name.cc -lsicklms-x -pthread 

しかし、私はEclipseを使用している、コマンドラインを使用していませんよ。

マイプロジェクトが "テスト" と呼ばれ、私はこれであるだけで1クラス "main.cppに" を持っている:

/* 
* Test.cpp 
* 
* Created on: Dec 1, 2011 
*  Author: igvc 
*/ 
#include <iostream> 
#include <sicklms-1.0/SickLMS.hh> 
using namespace std; 
using namespace SickToolbox; 
int main(int argc, char *argv[]) { 
    /* Specify device path and baud */ 
    string dev_path = "/dev/ttyUSB0"; 
    sick_lms_baud_t lms_baud = SickLMS::SICK_BAUD_38400; 
    /* Define buffers for return values */ 
    unsigned int measurements[SickLMS::SICK_MAX_NUM_MEASUREMENTS] = {0}; 
    unsigned int num_measurements = 0; 
    /* Instantiate the object */ 
    SickLMS sick_lms(dev_path); 
    try { 
     /* Initialize the device */ 
     sick_lms.Initialize(lms_baud); 
     /* Grab some measurements */ 
     for(unsigned int i = 0; i < 10; i++) { 
      sick_lms.GetSickScan(measurements,num_measurements); 
      cout << "\t" << num_measurements << endl; 
     } 
     /* Uninitialize the device */ 
     sick_lms.Uninitialize(); 
    } 
    catch(...) { 
     cerr << "error" << endl; 
     return -1; 
    } 
    return 0; 
} 

私はすべてのこれらのエラーを取得しています:

undefined reference to `SickToolbox::SickLMS::~SickLMS()` 
undefined reference to `SickToolbox::SickLMS::GetSickScan(unsigned int*, unsigned int&, unsigned int*, unsigned int*, unsigned int*, unsigned int*, unsigned int*)' 
undefined reference to `SickToolbox::SickLMS::Initialize(SickToolbox::SickLMS::sick_lms_baud_t)' 
undefined reference to `SickToolbox::SickLMS::SickLMS(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)' 
undefined reference to `SickToolbox::SickLMS::Uninitialize()' 

だから私はそれがリンクの問題だと思ってください。そして、上記のコマンドをリンクする必要がありますが、チュートリアルでは必要ですが、私はEclipseで設定する方法がわかりません。

ここでコードは#include sicklms-1.0/SickLMS.hhと書かれていますが、プロジェクト>プロパティ> C/C++ビルド>設定> GCC C++コンパイラ>ディレクトリに行き、.hファイルにディレクトリを追加しました。それらのエラーを取得します。私はGCC C++リンカー>ライブラリ>ライブラリ検索パス(-L)に行き、sicktoolbox-1.0.1ディレクトリを追加しましたが、ライブラリ(-l)に何を入れるべきかわかりません。

何か助けていただきありがとうございます。私は本当にこれに固執しています。

+0

ソフトウェアをビルドするために 'make(1)'を使用しない特別な理由はありますか? – sarnold

+0

申し訳ありませんが、私はCやC++に精通していないので、make(1)が何であるか本当に分かりません。私はいつもEclipseでJavaを使いました。 JavaとC++を使用しているので、私のチームはEclipseを使い続けたいと思っています。私たちはC++で低レベルのプログラム(このようなもの)を書いており、これをJavaでラップしています。私たちはこの問題を回避できればEclipseで簡単だと思います。 – user1028641

答えて

2

おそらくあなたはEclipse CDTを使用していますか?

プロジェクトを右クリックし、コンテキストメニューから[プロパティ]を選択します。 [プロパティ]ダイアログで

、ライブラリボックスでC/C++ビルド - >設定 - > GCC C++リンカー - >ライブラリに

を選択し、新しいライブラリを追加するには、+ボタンをクリックし、タイプsicklms

ライブラリはリンカーのパスに含まれている必要があります。/usr/libと/ usr/local/libはかなり標準的です。リンカーがライブラリ名の前にのlibを追加するので、ライブラリ名は-lの場合はlibsicklms.aまたはlibsicklms.soでなければなりません。

sicklmsは./configureを& &でソースからインストールした場合は、& &をインストールし、ライブラリは、そうでない場合はlibには/ usr /ローカルの/ usr/libのか/どちらかの標準ライブラリパスすなわちである必要があり、あなたの問題ではない作る作りますあなたのリンカーが、sicklmsがインストールされた方法です。

上記の手順のいずれかがなんとかしていない場合、あなたはCDTをインストールしている場合は、私が)

A)のEclipseのバージョン(ガリレオ、インディゴ、等)

Bをお知らせする必要があります。

c)システムにsicklmsがどのようにインストールされたか(パッケージマネージャ、ソースなどから構築されたもの)。

+0

ありがとう!私は/ usr/local/libに行って、libsicklms-1.0.aと.soファイルがそこにあるのを見て、ライブラリに "sicklms-1.0"を追加して、それらのコンパイラエラーを修正しました。再びありがとう! – user1028641

+0

あなたは大歓迎です。これで、必要なライブラリを追加する方法が分かりました。私はあなたが何を使っているのか分かりませんが、DebianベースのLinuxディストリビューションを使用している場合、sudo apt-get install {library}は/ usr/libまたは/ usr/local/libにライブラリをインストールします。同じことは、make && make installを使ってソースからビルドされたほとんどのライブラリにも当てはまります。それらの場所にある図書館を探し、上記と同じプロセスを使用してください。頑張って楽しんでね。 –

0

あなたがここに書いたことに全面的に基づいて、はの部分にと考えると、ちょうど-lpthread -lsicklms-xを追加する必要があります。しかし、これは、Eclipseがmake(1)のようなツールを置き換えるのに十分な賢さを提供していると仮定しています。これは大きなプロジェクトの再構築にとっては本当に素晴らしいことです。

はこのようなプロジェクトディレクトリ内Makefileを作成してみてください:

makeを実行
LDFLAGS=-L/path/to/sicklms-directory -lsicklms-x -lpthread 

その後、得られます。

$ make main 
g++ -L/path/to/sicklms-directory -lsicklms-x -lpthread main.cpp -o main 
/usr/bin/ld.bfd.real: cannot find -lsicklms-x 
collect2: ld returned 1 exit status 
make: *** [main] Error 1 

(私はあなたのライブラリが利用できていないので、それが失敗した。しかし、それはありません。ソースをビルドしようとするために実行されたコマンドラインを表示してください。)

Javaをコンパイルするためのいくつかの簡単な変更を加えることができますプログラムも。私は簡単に利用できる超単純なJavaソースを持っているが、次のMakefileは私は非常に簡単にそれらを再構築することができます:。

$ cat Makefile 
.SUFFIXES: .java .class 

.java.class: 
    javac $< 

all: Echo.class Test.class Compress.class 
$ make Echo.class Test.class 
javac Echo.java 
make: `Test.class' is up to date. 
$ rm *class 
$ make 
javac Echo.java 
javac Test.java 
javac Compress.java 

は(字下げした行をタブでインデントされていることに注意してくださいそれはタブでなければなりません。 make(1)は、いくつかの重大な不都合な点でかなり古風です。)

関連する問題