Windows 7 对gzopen等的未定义引用

Windows 7 对gzopen等的未定义引用,windows-7,g++,cygwin,mingw,Windows 7,G++,Cygwin,Mingw,嗨,我有一个c语言的程序,它是在一台非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

嗨,我有一个c语言的程序,它是在一台非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
我确实安装了gccg++和zlib

然后,我在正确的目录中使用mingw32-make尝试了mingw32。 返回错误的速度快于肉眼所能看到的速度:
ld.exe:找不到-lz


有什么建议吗?请记住,我是经过培训的经济学家,我们知道这是多么有用:-)。Simple会让我受益匪浅。

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

如果它位于末尾,则链接器将找到它,即使它在开始时没有找到它?@miserableable:yes-当链接器按命令行顺序处理它时,将搜索该库一次。图书馆目前不需要的任何东西都不会被收回。不会再次搜索库以解决后续需要。此行为特定于GNU
ld
链接器,对于其他链接器可能相同,也可能不同(例如,MSVC的链接器行为不同)。有关详细信息,请参见和。格雷西亚斯·伯尔先生。正是我需要的。好吧,还没有雪茄。我在bin文件夹中找到一个可执行文件。但是,在点击此按钮后,我发现cygwin1.dll没有安装。这是否意味着我现在不能像在windows上使用任何exe文件那样使用exe文件?当您在资源管理器中使用鼠标启动可执行文件时,使用的路径是资源管理器的路径-这可能与您可能用于生成程序的命令窗口中的路径不匹配。尝试从用于构建程序的环境中运行该程序。要从资源管理器中运行,可能需要在计算机属性“高级系统设置”对话框中正确设置路径。它可能还需要注销/登录,甚至可能需要重新启动机器。我已经做了一些更改,我认为这些更改会有所帮助,但可以随时恢复。此外,似乎也有关系,你可能想试试同样的例子。事实上,我发现伯尔先生的回答全面而清晰。我同意你的标题编辑-更有可能有人会找(我当然找了!)。谢谢