[英]Mixing C and C++ code yields unexpected behavior in GCC
我通過包含外部頭文件在我當前的C ++項目中使用遺留C代碼:
extern "C" {
# include "ANN/ANN_4t70P1.h"
# include "ANN/ANN_4t70P2.h"
# include "ANN/ANN_4t70P3.h"
# include "ANN/ANN_4t70P4.h"
}
頭文件看起來像這樣:
extern int ANN_4t70P1(float *in, float *out, int init);
static struct {
int NoOfInput; /* Number of Input Units */
int NoOfOutput; /* Number of Output Units */
int(* propFunc)(float *, float*, int);
} ANN_4t70P1REC = {8,3,ANN_4t70P1};
C代碼由古老的批處理文件創建,無法使用C ++編譯器進行編譯。 不過,這個實現適用於Windows和Mac OS。 但是,當我在Linux上使用gcc和g ++編譯代碼並運行應用程序時,ANN_4t70P1REC返回不正確的值。
鏈接項目時是否遺漏了任何特殊的鏈接器標志?
謝謝!
你是什么意思:
C代碼由古老的批處理文件創建,無法使用C ++編譯器進行編譯
您是否使用不同編譯器生成的目標文件進行鏈接? 如果是這樣,請嘗試使用以下方法檢查目標文件:
readelf -h <objectname>
檢查是否有不同的ABI。 如果代碼是由非常舊的GCC <3.3 / 3.4生成的,那么您可能會遇到與較新版本鏈接的問題。
您確定鏈接期間沒有任何警告嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.