C++ 什么是gcc编译器选项-“未签名”;是为了什么?
我正在RHEL7上使用gcc编译器4.8.5编译遗留代码。所有的C和C++文件都有“无符号”作为GCC和G++编译的默认标志之一。编译器接受此选项并成功编译。但是,我在gcc手册或在线上找不到关于此选项的任何文档。有人知道这个选项是什么吗?我必须移植代码,并且不知道是否需要移植此编译器选项。我怀疑其目的是为了编译程序。我不知道这在恐龙时代是否曾经是无符号的,也许GCC仍然注意到这种拼写;没有办法从手册中知道,因为如果它知道,它是一个未记录的功能C++ 什么是gcc编译器选项-“未签名”;是为了什么?,c++,c,gcc,g++,C++,C,Gcc,G++,我正在RHEL7上使用gcc编译器4.8.5编译遗留代码。所有的C和C++文件都有“无符号”作为GCC和G++编译的默认标志之一。编译器接受此选项并成功编译。但是,我在gcc手册或在线上找不到关于此选项的任何文档。有人知道这个选项是什么吗?我必须移植代码,并且不知道是否需要移植此编译器选项。我怀疑其目的是为了编译程序。我不知道这在恐龙时代是否曾经是无符号的,也许GCC仍然注意到这种拼写;没有办法从手册中知道,因为如果它知道,它是一个未记录的功能 我想在这里询问原作者的意图,因为他们认为这不适合文
我想在这里询问原作者的意图,因为他们认为这不适合文档。我怀疑这只是Makefile中的一个错误,或者编译代码所用的任何东西 gcc不支持
-无符号
选项。但是,它会将选项传递给链接器,GNU ld有一个-u
选项:
“-u符号”'--未定义=符号'
强制在输出文件中输入未定义的符号 象征。例如,这样做可能会触发附加的链接 标准库中的模块。”-u’可以用复数形式重复 输入其他未定义符号的不同选项参数。 此选项相当于“EXTERN”链接器脚本命令
-u
和符号名称之间的空格是可选的
因此,其目的可能是对无符号类型进行处理,但至少在现代版本的gcc中,其效果是在输出文件中输入nsigned
,作为未定义的符号
在我做的快速测试(编译并运行一个小的“hello,world”程序)中,这似乎没有效果。程序运行正常,nm hello
的输出包括:
U nsigned
在另一个系统上使用较旧版本的gcc(2.95.2),我得到了一个关于未定义符号的致命链接时间错误。当你说legacy时,legacy如何?如果您知道它最初是为什么编译器编写的,我们可以开始在旧手册中进行二分法。请注意,我能找到的最早的GCC版本是2.95.3,它也没有
-unsigned
。据我所知,GCC允许使用添加命令行参数。您可以尝试查看他们是否正在使用自定义规范文件,或者至少不再这样工作。vs@BaummitAugen:作为旁白,下面的0
是什么?o、 我相信gcc的价值。编译失败时是1
。@BaummitAugen:明白了。哇,这太令人困惑了。gcc实际上接受-未签名的,但不是作为编译器选项。看到我的答案了。你有一个gcc 2.95在工作吗?0.哦,好发现!:)@BaummitAugen:在运行Solaris 9的SPARC上。(不是我的,只是我可以访问的一个系统。)