1

libpano13の関数を使用しながら、非常に単純なプログラムをコンパイルしようとしていますが、リンクエラーが発生しています。私はUbuntu10.04を使用しており、次のことを行っています。

sudo apt-get install libpano13-dev

私のサンプルプログラムは次のとおりです。

#include <cstring>
#include <pano13/PTcommon.h>

int main(int argc, char **argv) {
    fullPath *outFile = new fullPath();
    StringtoFullPath(outFile, (char *)"/tmp/randomImage.jpg");

    return 0;
}

次のコマンドでこれをコンパイルしようとしています(上記のコードはpanoTest.cppというファイルにあります)。

$ g++ panoTest.cpp -o testApp -L/usr/lib -lpano13

このコマンドを実行すると、次のエラーが発生します。

$ g++ panoTest.cpp -o testApp -L/usr/lib -lpano13 
/tmp/ccyIioEi.o: In function `main':
panoTest.cpp:(.text+0x87): undefined reference to `StringtoFullPath(fullPath*, char*)'
collect2: ld returned 1 exit status
make: *** [all] Error 1

ここで、/ usr /libでlibpano*を確認し、次のファイルを見つけました。

$ ls /usr/lib/libpano*
/usr/lib/libpano13.a  /usr/lib/libpano13.so  /usr/lib/libpano13.so.1
/usr/lib/libpano13.so.1.0.0

nmを使用してlibpano13.soをチェックし、次の出力を取得しました。

$ nm --demangle /usr/lib/libpano13.a | grep StringtoFullPath
U StringtoFullPath
U StringtoFullPath
00000000 T StringtoFullPath

$ nm --demangle /usr/lib/libpano13.so | grep StringtoFullPath
nm: /usr/lib/libpano13.so: no symbols

また、objdumpを使用して確認しました。

$ objdump -T /usr/lib/libpano13.so | grep StringtoFullPath
00057fd0 g    DF .text  0000004c  Base        StringtoFullPath

したがって、次のことが当てはまるようです。

  1. libpano13は/usr/libに存在します。
  2. libpano13には、StringtoFullPathのシンボルが含まれています。
  3. / usr/libの正しいライブラリディレクトリを使用しています。
  4. pano13の正しいライブラリ名を使用しています。
  5. g++はライブラリを見つけることができます

しかし、何らかの理由で、g++はStringtoFullPathのシンボルを見つけることができません。

なぜこれが起こっているのかについて誰かが提案/アイデアを持っていますか?

どんな助けでも大歓迎です!

4

1 に答える 1

2

The

undefined reference to `StringtoFullPath(fullPath*, char*)'

少し心配です。パラメータのタイプが含まれています。ほとんどのLinuxライブラリはC++ではないため、タイプはありません...

ヘッダーの#includeをextern"C"{...}ブロックで囲んでみてください。

于 2012-07-22T23:00:46.970 に答える