我有一個運行在許多不同Linux發行版上的程序。當我在FreeBSD 10.1上編譯它時出於某種原因,catch子句停止工作,應該被捕獲的異常使我的程序崩潰。在調試時,我修改了其中一個catch子句以「catch(...)」,但仍然沒有發現異常。我猜這個問題與鏈接器有關,但我不知道如何進一步調試。當我嘗試編譯一個簡單的拋出和捕獲異常的測試程序時 - 所以我猜測鏈接器無法正確鏈接不同的對象。C++代碼在FreeBSD上沒有發現異常
任何人都知道我該如何解決它? 感謝
編輯: 編譯實例(在命令原始路徑較長,刪除了他們爲清楚起見):
我整理了很多這樣的類:
/usr/local/bin/g++ -O3 -c -DFreeBSD -D_FreeBSD -I. -I/usr/local/openjdk8/include -I/usr/local/openjdk8/include/freebsd -DBOOL_DEFINED -D_BOOL -DFreeBSD -fPIC -I../../../../common/cpp -DVERSION_MAJOR=8 -DVERSION_MIDDLE=2 -DVERSION_MINOR=8 -DNSC_DEBUG -DUSE_HINT_FILES -o CNBCommand.o CNBCommand.cpp
然後創建
歸檔ar srv "bin/FreeBSD_10.1-RELEASE/mechanism.a" <many .o files compiled like above>
和最終可執行文件與鏈接:
/usr/local/bin/g++ -O3 -B/usr/local/bin -rpath=/usr/local/lib -lstdc++ -lpthread -o "../bin/FreeBSD_10.1-RELEASE/nbstatus" <many *.o files compiled like above> bin/FreeBSD_10.1-RELEASE/mechanism.a
這是G ++我用:
/usr/local/bin/g++ -v
Using built-in specs.
COLLECT_GCC=/usr/local/bin/g++
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc49/gcc/x86_64-portbld-freebsd10.1/4.9.3/lto-wrapper
Target: x86_64-portbld-freebsd10.1
Configured with: ./../gcc-4.9-20141126/configure --disable-nls --enable-gnu-indirect-function --libdir=/usr/local/lib/gcc49 --libexecdir=/usr/local/libexec/gcc49 --program-suffix=49 --with-as=/usr/local/bin/as --with-gmp=/usr/local --with-gxx-include-dir=/usr/local/lib/gcc49/include/c++/ --with-ld=/usr/local/bin/ld --with-pkgversion='FreeBSD Ports Collection' --with-system-zlib --with-ecj-jar=/usr/local/share/java/ecj-4.5.jar --enable-languages=c,c++,objc,fortran,java --prefix=/usr/local --mandir=/usr/local/man --infodir=/usr/local/info/gcc49 --build=x86_64-portbld-freebsd10.1
Thread model: posix
gcc version 4.9.3 20141126 (prerelease) (FreeBSD Ports Collection)
我們很難說出你的代碼做什麼,什麼時候我們沒有看到它,或者你用於編譯和鏈接的選項。 「禁用異常」是一種可能的編譯器選項... –
FreeBSD上的編譯器必須具有不同的默認設置。 – Surt
感謝您的回覆,我編輯了問題並添加了更多信息。 – ItamarBe