对_gzopen等的未定义引用

时间:2012-10-31 00:21:12

标签: windows-7 g++ cygwin mingw

您好我在非Windows机器上构建了一个程序(我认为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

我确实安装了gcc g ++以及zlib。

然后我在右侧目录中使用mingw32-make尝试了mingw32。 返回错误的速度比眼睛看到的快: ld.exe: cannot find -lz

有什么建议吗?请记住,我是一名训练有素的经济学家,我们知道这是多么有用:-)。简单就跟我走了。

1 个答案:

答案 0 :(得分:4)

更改makefile,使-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以查找目标文件所需的任何外部引用。