2016-10-17 70 views
2

我正在使用RHEL7上的gcc編譯器4.8.5編譯遺留代碼。所有C和C++文件都有「-unsigned」作爲gcc和g ++編譯的默認標誌之一。編譯器接受該選項併成功編譯。但是,我無法在gcc手冊或在線任何地方找到此選項的任何文檔。有誰知道這個選項是什麼?我必須移植代碼,並且很困惑這個編譯器選項是否需要移植。gcc編譯器選項「-unsigned」是什麼意思?

+0

當你說遺產,遺產有多大?如果您知道它最初編寫的是什麼編譯器,我們可以開始在舊手冊中平分。請注意,我能找到的最早的GCC版本是2.95.3,而且它也沒有'-unsigned'。 –

+2

據我所知,GCC允許使用[spec文件](https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html)添加命令行參數。您可以嘗試查看他們是否使用自定義規格文件 –

回答

4

我懷疑這只是Makefile中的一個錯誤,或者是用來編譯代碼的錯誤。

gcc不支持-unsigned選項。然而,它確實將選項傳遞給鏈接器和GNU ld有-u選項:

「-u符號」
「--undefined =符號」輸出文件被輸入
部隊符號作爲未定義的 符號。例如,這可能會觸發從標準庫鏈接額外的 模塊。可以用 不同的選項參數重複'-u'以輸入其他未定義的符號。 該選項等同於'EXTERN'鏈接描述文件命令。

-u與符號名稱之間的間隔是可選的。

所以意圖可能是用無符號類型做一些事情,但至少在現代版本的gcc中,效果是在輸出文件中輸入nsigned作爲未定義的符號。

這似乎對我做的快速測試沒有影響(編譯並運行一個小的「hello,world」程序)。該程序運行正常,並nm hello輸出包括:

    U nsigned 

使用舊版本不同的系統上的gcc(2.95.2)的,我得到未定義的符號致命的鏈接時錯誤。

+0

大聲笑............ :) –

+0

你有一個工作gcc 2.95躺在? 0。o很好找! :) –

+1

@BaummitAugen:在運行Solaris 9的SPARC上。(不是我的,只是我可以訪問的一個系統。) –

0

我懷疑這個程序是用-funsigned-char編譯的。我不知道在恐龍時代這是否是-unsigned,也許海灣合作委員會實際上仍然注意到拼寫;沒有辦法從手冊中知道,因爲如果是這樣,這是一個無證的功能。

我會在這裏問原作者的意圖,因爲他們認爲不適合文檔。

+2

顯然不是,或者至少不會像那樣工作。 http://melpon.org/wandbox/permlink/XXTmWrJ6ggmQa01h vs http://melpon.org/wandbox/permlink/S8E1jAFnmDOb4ssR –

+0

@BaummitAugen:另外,下面的'0'是什麼? O.O –

+0

我相信gcc的返回值。編譯失敗時爲'1'。 –

相關問題