簡體   English   中英

混合C和C ++代碼會在GCC中產生意外行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM