对 _gzopen 等的未定义引用

pyt*_*ist 2 cygwin mingw g++ windows-7

嗨,我有一个建立在非 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
Run Code Online (Sandbox Code Playgroud)

我确实安装了 gcc g++ 和 zlib。

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

有什么建议?请记住,我是一名受过培训的经济学家,我们知道这有多么有用:-)。简单会和我走得很远。

Mic*_*urr 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
Run Code Online (Sandbox Code Playgroud)

不会在库中搜索各种目标文件所需的外部引用。如果你安排它,命令看起来像:

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
Run Code Online (Sandbox Code Playgroud)

然后libz将搜索目标文件需要的任何外部引用。

  • 当您在资源管理器中使用鼠标启动可执行文件时,使用的 PATH 是资源管理器的 - 这可能与您可能用于构建程序的命令窗口中的 PATH 不匹配。尝试从用于构建它的环境运行该程序。要让它从资源管理器中运行,您可能需要在计算机属性的“高级系统设置”对话框中正确设置 PATH。它还可能需要注销/登录,甚至可能需要重新启动机器。 (2认同)