2

こんにちは私はWindows以外のマシンで構築されたcのプログラムを持っています(ubuntuマシンだと思いますが、mac osでもかまいません)。

私はざっと見て回り、cygwinを試しました(cygwinをインストールし、ターミナルを使用してcプログラムを含むディレクトリに移動し、makeを呼び出しました)。

これにより、次のようになります。

$ make
g++ -lz -Wextra -O3 -o bin/lda src/lda_main.o src/data.o src/lda.o c/lda_init.o
   src/lda_io.o src/lda_sampler.o src/opts.o

src/data.o:data.cpp:(.text+0x5d): undefined reference to `_gzopen'
src/data.o:data.cpp:(.text+0x9e): undefined reference to `_gzgets'
src/data.o:data.cpp:(.text+0x138): undefined reference to `_gzgets'
src/data.o:data.cpp:(.text+0x1f0): undefined reference to `_gzgets'
src/data.o:data.cpp:(.text+0x257): undefined reference to `_gzclose'
src/data.o:data.cpp:(.text+0x3cb): undefined reference to `_gzopen'
src/data.o:data.cpp:(.text+0x498): undefined reference to `_gzgets'
src/data.o:data.cpp:(.text+0x4b4): undefined reference to `_gzclose'

/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: src/data.o:
   bad reloc address 0x1c in section `.eh_frame'
collect2: ld returned 1 exit status
Makefile:16: recipe for target `lda' failed
make: *** [lda] Error 1

私はgccg++とzlibをインストールしています。

次に、正しいディレクトリでmingw32-makeを使用してmingw32を試しました。目で確認できるよりも速くエラーを返します。 ld.exe: cannot find -lz

助言がありますか?私はトレーニングによるエコノミストであり、それがどれほど役立つかを知っていることを覚えておいてください:-)。シンプルは私と一緒に行きます。

4

1 に答える 1

5

-lzオブジェクト ファイルのリストの後に来るようにメイクファイルを変更します。

コマンド ラインを使用する場合:

g++ -lz -Wextra -O3 -o bin/lda src/lda_main.o src/data.o src/lda.o src/lda_init.o
   src/lda_io.o src/lda_sampler.o src/opts.o

ライブラリは、さまざまなオブジェクト ファイルが必要とする外部参照を検索しません。コマンドが次のようになるように配置すると、次のようになります。

g++ -Wextra -O3 -o bin/lda src/lda_main.o src/data.o src/lda.o src/lda_init.o
   src/lda_io.o src/lda_sampler.o src/opts.o -lz

次にlibz、オブジェクト ファイルに必要な外部参照が検索されます。

于 2012-10-31T00:45:09.603 に答える