我正在使用RHEL7上的gcc编译器4.8.5编译遗留代码。所有C和C ++文件都有“-unsigned”作为gcc和g ++编译的默认标志之一。编译器接受此选项并成功编译。但是,我无法在gcc手册或在线任何地方找到此选项的任何文档。有谁知道这个选项是什么?我必须移植代码,并且对这个编译器选项是否需要被移植感到困惑。
答案 0 :(得分:4)
我怀疑这只是Makefile中的一个错误,或者用于编译代码的任何错误。
gcc不支持-unsigned
选项。但是,它确实将选项传递给链接器,GNU ld有-u
选项:
' -u SYMBOL'
' - 未定义= SYMBOL'
强制SYMBOL作为未定义输入到输出文件中 符号。例如,这样做可以触发附加的链接 标准库中的模块。 ' -u'可以重复 输入其他未定义符号的不同选项参数。 此选项相当于' EXTERN'链接器脚本命令。
-u
和符号名称之间的空格是可选的。
所以意图可能是用无符号类型做某事,但至少在现代版本的gcc中,效果是在输出文件中输入nsigned
作为未定义的符号。
这似乎对我做的快速测试没有任何影响(编译和运行一个小小的"你好,世界"程序)。程序运行正常,nm hello
的输出包括:
U nsigned
在不同系统上使用旧版本的gcc(2.95.2)时,我会收到有关未定义符号的致命链接时错误。
答案 1 :(得分:0)
我怀疑打算用-funsigned-char
编译程序。我不知道这曾经是-unsigned
,回到恐龙时代,也许海湾合作委员会实际上仍然需要注意拼写;没有办法从手册中知道,因为如果有的话,它是一个没有记录的功能。
我在这里问原作者的意图,因为他们认为不适合记录。