链接glib-2.0时,cygwin gcc 4.3中的参数顺序很重要

链接glib-2.0时,cygwin gcc 4.3中的参数顺序很重要,gcc,autoconf,arguments,Gcc,Autoconf,Arguments,我正在尝试使用cygwin编译在OSX和linux上工作的代码。然而,我发现gcc的论证顺序给出了意想不到的结果 例如,以下操作失败: gcc -std=gnu99 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lglib-2.0 -lintl -liconv -fgnu89-inline -fno-leading-underscore -o nb-learn.exe nb-learn.c 但以下工作: gcc -std=gnu99

我正在尝试使用cygwin编译在OSX和linux上工作的代码。然而,我发现gcc的论证顺序给出了意想不到的结果

例如,以下操作失败:

gcc -std=gnu99 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lglib-2.0 -lintl -liconv -fgnu89-inline -fno-leading-underscore -o nb-learn.exe nb-learn.c
但以下工作:

gcc -std=gnu99 -fgnu89-inline -fno-leading-underscore -o nb-learn.exe nb-learn.c -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lglib-2.0 -lintl -liconv
有人能解释一下这是怎么回事吗?另外,有没有技术或代码可以让autoconf根据平台改变参数顺序

以下是错误消息的前两行:

/cygdrive/c/Users/aischein/AppData/Local/Temp/cc9MvUsf.o:nb-learn.c:(.text+0x260): undefined reference to `_g_hash_table_size'
/cygdrive/c/Users/aischein/AppData/Local/Temp/cc9MvUsf.o:nb-learn.c:(.text+0x29c): undefined reference to `_g_hash_table_get_keys'
谢谢

SetJmp (通用条款4.3.4)

-l

-l

链接时搜索名为library的库。(将库作为单独参数的第二个备选方案仅用于POSIX合规性,不推荐使用。)

在命令中写入此选项的位置会有所不同;链接器按照指定的顺序搜索和处理库和对象文件

因此,`code>foo.o-lz bar.o'在文件
foo.o
之后但在
bar.o
之前搜索库`code>z。如果
bar.o
引用了`
z
中的函数,则可能无法加载这些函数


-Wl、-start group
-Wl、-end group
选项有时可用于避免此类问题



如果只使用共享库,所有这些都不是问题。

pkg config--libs glib-2.0--cflags glib-2.0?Laurynas,输出为:
-I/usr/include/glib-2.0-I/usr/lib/glib-2.0/include-lglib-2.0-lintl-liconv
@SetJmp第一种情况下的错误消息是什么?@Laurynas:I添加了一些错误消息(其余的错误消息类似于符号错误)。另外,我用更明确的值替换了
pkg config
调用。为什么需要
-fno引导下划线来回答问题的第二部分(autoconf集成),LIBS变量放在autoconf生成的makefile中的源文件之后。