[英]Updated packages, now Mex files compiled with -O0 are "invalid mex file"?
我有一組(以前工作和編譯了幾個月)MEX 文件集。 我用 pacman -Syu 更新了我 3 個月大的軟件包(以前在 GCC/G++ 中運行良好),現在這是我的結果:
對於GCC/G++ :
對於鏗鏘:
對於TDM-GCC :
操作系統:Win 10,最新更新
語言:C++03
MATLAB 版本:R2016B(沒有更新 7,雖然經過測試,但沒有幫助)
(更改 C++ 或 MATLAB 版本不是一種選擇,而是客戶要求)
MINGW64 GCC 版本:9.2.0
TDM GCC 版本:5.1.0-2
使用mex
編譯目前不是一種選擇。 (我在這里發表了一篇關於它的新帖子)
這是制作 c++ 對象文件時的樣子:
g++ -c -IC:/Progra~1/MATLAB/R2016b/extern/include -I(some library we made) -g3 -O0 -m64 -DFLIP_MEX_DEBUG=1 -DFLIP_C -ansi -Wshadow -Wall -DMX_COMPAT_32 -DMATLAB_MEX_FILE -fexceptions -fno-omit-frame-pointer -D__WIN32__ myFile.cpp -o myFile.o
下面是 C 目標文件的樣子:
gcc -c -IC:/Progra~1/MATLAB/R2016b/extern/include -I(some library we made) -g3 -O0 -m64 -DFLIP_MEX_DEBUG=1 -DFLIP_C -ansi -Wshadow -Wall -DMX_COMPAT_32 -DMATLAB_MEX_FILE -fexceptions -fno-omit-frame-pointer -D__WIN32__ myFile2.c -o myFile2.o
當 MEX 文件由該目標文件生成時,其外觀如下所示:
g++ -m64 -shared -Wl,-Bsymbolic -Wl,--no-undefined -Wl,C:/Progra~1/MATLAB/R2016b/extern/lib/win64/mingw64/exportsmexfileversion.def -o myFile.mexw64 myFile.o (various .o files linked in here) -pthread -LC:/Progra~1/MATLAB/R2016b/bin/win64 -LC:/Progra~1/MATLAB/R2016b/extern/lib/win64/mingw64 -lmex -lmx
我注意到mex
命令嘗試的內容和我們所做的有以下差異:
目標文件的差異:
mex 文件的差異:
晦澀的編譯器問題不是我的專長。 任何人對這里可能出現的問題有什么建議嗎?
切換到TDM-GCC修復了使用 -O0 編譯時 mex 文件無效的問題。 沒有其他(盡管我注意到其他差異)顯然重要。
我的錯誤(我認為)是我將 G++ 換成了 TDM-G++,但是 GCC 沒有這樣做,並且 repo 中有幾個 C 文件。
至於用MEX
編譯,這個問題也在鏈接的問題中解決了,所以它也是一個選項。
編輯:問題似乎在於 GCC 隨着時間的推移而更新。 無論如何,使用 -o0 它仍然會創建一個無效的 mex 文件。 使用 -o1-2 就可以了,使用 -o3 會忽略代碼的重要部分,除非添加了一個偽打印語句。 我發現最好的平衡是將其設置為使用 TDM-GCC/G++ 編譯 DEBUG,並使用 GCC 的最新版本進行其他所有操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.