![](/img/trans.png)
[英]Trying to understand cause of increased compile time going from C++11 to C++14
[英]Port C++14 Linux application to Solaris 10 and 11
當前正在將現有的c ++ linux應用程序移植到Solaris 10和11(首先是x86,然后是SPAARC)。
從在solaris 10上安裝gcc5g ++開始並開始編譯。 在math.h中發現錯誤,發現這是我安裝的g ++ 5.5版本中的錯誤。 由於這個錯誤,我得到類似的錯誤
/opt/csw/lib/gcc/i386-pc-solaris2.10/5.5.0/include-fixed/math.h:53:12:錯誤:尚未使用std :: double_t聲明'std :: double_t' ; ^
/opt/csw/lib/gcc/i386-pc-solaris2.10/5.5.0/include-fixed/math.h:55:12:錯誤:尚未使用std :: fpclassify聲明'std :: fpclassify' ; ^
/opt/csw/lib/gcc/i386-pc-solaris2.10/5.5.0/include-fixed/math.h:56:12:錯誤:尚未使用std :: isfinite聲明“ std :: isfinite” ; ^
由於我的應用程序使用了c ++ 14構造,而g ++ 4.92並不完全支持。 需要更高版本的g ++(5.5以上)
我找不到可以在Solaris 10上安裝更高版本的g ++的軟件包,因此我使用安裝了g ++ 7.3的Solaris 11機器嘗試執行Solaris 11到Solaris 10上生成的可執行文件,出現以下錯誤:
ld.so.1:hellod:致命:libc.so.1:找不到版本“ SUNWpublic”(由文件/ Desktop / hellod要求)ld.so.1:hellod:致命:libc.so.1:打開失敗:沒有這樣的文件或目錄被殺死
問題
非常感謝與該主題相關的任何幫助和指示。
首先,要支持更高版本的C ++標准,您的Solaris 10安裝必須是最新的。 有關原因的示例,請參見無法在Solaris 10上使用GCC 5.5包含cmath 。 閱讀注釋-有一些修補程序需要應用到Solaris 10,以使其與C ++ 11以及大概的C ++ 14兼容。
通常,您無法在Solaris 11上進行編譯,也無法在Solaris 10上運行生成的二進制文件。
好消息是,您應該能夠在Solaris 10上編譯並可以在Solaris 11上正常運行,因此您不必維護兩個單獨的環境,也不必提供兩個單獨的Solaris產品。 您將要使用二進制文件對此進行測試,但是從理論上講,它應該可以工作-根據我的經驗,它確實可以工作。
我找不到適用於Solaris 10的任何更高版本(大於5的版本),因此您可能必須引導自己的GCC 7或更高版本。 有關在上構建GCC 4.9.0的示例,請參見https://unix.stackexchange.com/questions/446760/how-to-build-a-gcc-4-9-0-successfully-on-solaris-10-sparc Solaris 10 SPARC。 請注意,根據以下發布內容,對Solaris 10的GCC支持可能即將終止: https : //gcc.gnu.org/ml/gcc/2018-10/msg00139.html :
因此,我認為是時候在GCC 9中過時了對該版本的支持,因此在GCC 10中將其刪除了。
我已經有好幾年沒有在Solaris 10上構建GCC了,所以我不知道您在構建GCC 7或8時會遇到什么。
另一種可能的替代方法是使用Oracle Developer Studio代替GCC。 12.6版支持C ++ 14,並且可用於Solaris 10和11。
一個警告-無論您如何編譯,幾乎都肯定要靜態鏈接libgcc
和libstdc++
,尤其是如果您編譯自己的GCC。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.