2011-07-23 7 views
5

qmakeを使用して自分のシステムでプロジェクトをコンパイルしようとしています。プロジェクトのいくつかの依存関係はインストールされていませんが、私のホームディレクトリにあります。libsファイル:/home/myusername/local/libと私のインクルードディレクトリ/home/myusername/local/includeです。インクルードディレクトリの中には、ライブラリから必要なヘッダを持つqjsonというフォルダがあります。 libフォルダに私はファイルlibqjson.so libqjson.so.0 libqjson.so.0.7.1を持っています。gcc -Iと-Lオプションが動作しないようです。

私のqmakeのプロジェクトファイルは、次のようなものになります。

linux-g++ { 
INCLUDEPATH += /home/myusername/local/include/ 
LIBS += -L/home/myusername/local/lib/ -lqjson 
} 

をして生成されたメイクファイルはこの1つのようなコマンドを生成します:

g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB \ 
    -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I../qbuzz \ 
    -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtGui \ 
    -I/usr/include/qt4 -I/home/myusername/local/include/ -I. -I. -I../myproject -I. \ 
    -o qbuzz-result.o ../myproject/myfile.cc 

私がディレクトリ-Iオプションである含めることは明らかですgccの私は、今

../myproject/myfile.cc:2:26: fatal error: qjson/parser.h: No such file or directory 
compilation terminated. 

、私は私の地元を追加するために、環境変数CPLUS_INCLUDE_PATHを変更した場合、ファイルが含まれます。ただし、makeを実行した後、私はエラーを取得する

#include <qjson/parser.h> 

myfile.ccはこのように含めるには含まれていそこに問題はないが、リンカ段階で、私はエラーを得た:

/usr/bin/ld: cannot find -lqjson 
collect2: ld returned 1 exit status 

リンカコマンドだったにもかかわらず:

g++ -omyprogram main.o mainwindow.o myfile.o moc_mainwindow.o -L/usr/lib \ 
    -L/home/myusername/local/lib/ -lqjson -lQtGui -lQtNetwork -lQtCore -lpthread 

環境変数LIBRARY_PATHを変更することもできます。しかし、私はできるだけ環境変数を変更することに頼っている解決策を探しています。結局のところ、なぜオプション-Lと-Iがありますか?

私はMinGW g ++を使用しても問題なくWindowsで動作します。

+0

男これは確かに心配です。しかし、私は何も推測していません – marinara

+0

LIBRARY_PATHまたはLD_LIBRARY_PATH? –

答えて

1

QTの自動インクルードパスにはスラッシュが付きません。後ろにスラッシュを入れずにパスを書こうとしましたか?

linux-g++ { 
INCLUDEPATH += /home/myusername/local/include 
LIBS += -L/home/myusername/local/lib -lqjson 
} 
1

G ++と友だち(つまり、as、ldなど)は、ヘッダーとライブラリファイルをどこから探すかを直接指示しません。これをデバッグする方法の1つはstrace -o output.txt -eopen -s 1024 -f qmakeです。これにより、すべてのopenシステムコールqmakeとそれをフォークするすべての子プロセスがログに記録されます。これにより、どのディレクトリでどのような順序でヘッダファイル(およびライブラリ)が検索されるかを確認することができます。 stdio.hの出力例抽出:

26069 open("/usr/lib/gcc/x86_64-redhat-linux/4.6.0/include/stdio.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory) 
26069 open("/usr/local/include/stdio.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory) 
26069 open("/usr/include/stdio.h", O_RDONLY|O_NOCTTY) = 4 
関連する問題