2

C++/Qt5 プロジェクトで OpenGL へのリンクに失敗しています。次のコマンドを使用してリンクします。

g++ -m64 -Wl,[...] -o [...] [...].o                               \
    -L/usr/X11R6/lib64 -L[...]/qt-5.0.0/5.0.0/gcc_64/lib          \
    -lQt5Widgets -lQt5Network -lQt5Gui -lQt5Core -lGL -lpthread 

[...]重要なことを隠していないことを願っています。そうだと思われる場合は、お知らせください。

次のエラーが表示されます。

/usr/bin/ld: cannot find -lGL

私は Lubuntu 12.10 システムを使用しており、http://qt-project.org/downloadsの Qt5 を使用しています。システムを新しくインストールしたので、最初にUbuntuのnvidia-currentパッケージをインストールして再起動しました。特に、次のライブラリがシステムにインストールされています。

$ ll /usr/lib/nvidia-current/
[...]
lrwxrwxrwx   1 root root       10 Oct  6 04:58 libGL.so -> libGL.so.1
lrwxrwxrwx   1 root root       15 Oct  6 04:58 libGL.so.1 -> libGL.so.304.43
-rw-r--r--   1 root root  1076560 Oct  6 04:58 libGL.so.304.43
[...]

このパスをデフォルトのライブラリ検索パスに追加する方法をグーグルで検索しました.g++サブフォルダーではnvidia-currentなく/usr/lib. ld.conf.dそこで、Ubuntuにパスを追加しました。ldconfig次のコマンドで更新して確認しました。

$ ldconfig -p | grep libGL.so
        libGL.so.1 (libc6,x86-64) => /usr/lib/nvidia-current/libGL.so.1
        libGL.so.1 (libc6) => /usr/lib32/nvidia-current/libGL.so.1
        libGL.so (libc6,x86-64) => /usr/lib/nvidia-current/libGL.so
        libGL.so (libc6) => /usr/lib32/nvidia-current/libGL.so

だから、すべてがうまく見えます!それでも(再起動後も)、上記のエラーが表示されます。何か不足していますか?

編集:

を追加する-L/usr/lib/nvidia-current/と、すべて正常に動作します。しかし、これはデフォルト パスのライブラリに対してリンクする正しい方法ではないようです。

4

1 に答える 1

3

ディストリビューションでは、グラフィックス ドライバーの libGL をシステム ライブラリ パスにインストールするのではなく、追加のディレクトリにインストールして、同じシステムに の/usr/libさまざまなバリアントをインストールできるようにするのが一般的です。libGL.so次に、アクティブへのシンボリックリンクが、libGL.soたとえばalternativesUbuntu や Debian で使用されるような集中型構成システムによって作成されます。この構成ステップが失敗した可能性が非常に高いです。

/usr/lib/nvidia-currentは標準ライブラリ パスではないため、ライブラリが見つかりません。これは、OpenGL プログラムが動作しないことも意味します。LD_LIBRARY_PATHたぶん、Ubuntuの人々はこれを回避するために環境変数を使って何かをしています.

個人的には、シンボリック リンクを追加することをお勧めしますlibGL.so/usr/lib/usr/lib64/usr/lib32

/usr/lib/libGL.so.1 => /usr/lib/nvidia-current/libGL.so.1
/usr/lib32/libGL.so.1 => /usr/lib32/nvidia-current/libGL.so.1
/usr/lib/libGL.so => /usr/lib/nvidia-current/libGL.so
/usr/lib32/libGL.so => /usr/lib32/nvidia-current/libGL.so

alternativesシステムを使用してこれを実行し、新しい代替を追加することもできます。

于 2012-12-27T17:14:50.687 に答える