2017-09-17 33 views
0

QtプロジェクトをCentOSでコンパイルしようとしています。 This質問 thisを参照して、別のglibcライブラリ/users/my/lib64/(私は/ lib64 /を更新できません)と一緒にやりたいですか?Qtプロジェクトのための未定義のリファレンス "clock_gettimeとmemcpy"

これが出てコンパイルプットです:

g++ ./main.o ./moc_widget.o ./widget.o \ 
    -o ./test -Wl,--rpath=/users/my/lib64 \ 
    -Wl,--rpath=/users/my/Qt/5.9.1/gcc_64/lib \ 
    -Wl,--dynamic-linker=/users/my/lib64/libc.so.6 \ 
    -Wl,--dynamic-linker=/users/my/lib64/libz.so.1 \ 
    -L/users/my/Qt/5.9.1/gcc_64/lib -lQt5Widgets \ 
    -lQt5Gui -lQt5Core -lGL -lpthread -lglib-2.0 -lrt -lX11 \ 
    -I/users/my/test/2 \ 
    -I/users/my/Qt/5.9.1/gcc_64/include \ 
    -I/users/my/Qt/5.9.1/gcc_64/include/QtWidgets \ 
    -I/users/my/Qt/5.9.1/gcc_64/include/QtCore \ 
    -I/users/my/Qt/5.9.1/gcc_64/include/QtGui 

.PROファイル:

QT  += core gui 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

TARGET = test 
TEMPLATE = app 

DEFINES += QT_DEPRECATED_WARNINGS 

CONFIG += qt 

SOURCES += \ 
     main.cpp \ 
     widget.cpp 

HEADERS += \ 
     widget.h 

FORMS += \ 
     widget.ui 

gccのバージョン:6.1.0

しかしエラー:

/users/my/Qt/5.9.1/gcc_64/lib/libQt5Core.so: undefined reference to `[email protected]_2.17' 
    /users/my/Qt/5.9.1/gcc_64/lib/libQt5Widgets.so: undefined reference to `[email protected]_2.14' 
    collect2 ld returned exit 1 status 

どのようにそれを解決するには?

+0

あなたの '.pro'ファイルを質問に追加すると、リンクエラーと思われ、gccのバージョンが含まれています – saeed

+0

ローカルマシンでプロジェクトをコンパイルしてターゲットマシンにデプロイするか、プロジェクトをコンパイルしたいのですか?ターゲットmachie – saeed

+0

ありがとうございます。私は私の質問を修正する。申し訳ありませんが、前者は理想的ですが、ターゲットマシンでアプリケーションを実行できないため、後者を試してみます。 – yaa

答えて

0
g++ ./main.o ./moc_widget.o ./widget.o \ 
-o ./test -Wl,--rpath=/users/my/lib64 \ 
-Wl,--rpath=/users/my/Qt/5.9.1/gcc_64/lib \ 
-Wl,--dynamic-linker=/users/my/lib64/libc.so.6 \ 
-Wl,--dynamic-linker=/users/my/lib64/libz.so.1 \ 
-L/users/my/Qt/5.9.1/gcc_64/lib -lQt5Widgets \ 
-lQt5Gui -lQt5Core -lGL -lpthread -lglib-2.0 -lrt -lX11 \ 
-I... 

このコマンドラインは、(あなたがprevious answerを理解していない)完全に偽です:そこだけ動的リンカすることができ、そしてそれは/users/my/lib64/ld-linux-x86-64.so.2、およびないlibz.so.1でなければなりません。複数の--dynamic-linker=...フラグを使用すると、のようになります。以前の(誤った)設定を新しい(不正確な)設定に置き換えます。

のリンク行に-I...フラグを指定すると、ソースがなくても意味がないため、偽りです。

このコマンドが成功した場合、libz.so.1ではないため、ダイナミックリンカであるため、ただちにクラッシュする可能性のある実行可能ファイルになります。

システムでリンクを実行しているため、リンクが失敗しました。 オリジナルのシステム(前にバイナリを正常にリンクしたものと、GLIBC 2.17以降を持っているもの)をリンクする必要があります。リンクされた実行可能ファイルをターゲットシステムに移動します。私は上記のインデントの2行は、あなたのオリジナルの成功のリンクコマンドからのみ変更する必要があります

g++ main.o moc_widget.o widget.o -o test \ 
    -Wl,-rpath=/users/my/lib64 \ 
    -Wl,--dynamic-linker=/users/my/lib64/ld-linux-x86-64.so.2 \ 
-L... 

元のシステムでは、あなたのリンクのコマンドは次のようになります。

関連する問題