簡體   English   中英

使用g ++從g ++和gfortran鏈接.o文件時出現“ __gfortran_pow_c8_i4”錯誤

[英]“__gfortran_pow_c8_i4” error when linking .o files from g++ and gfortran using g++

我正在嘗試鏈接使用g ++生成的.o文件和使用gfortran生成的另一個.o文件。

g++ -c mycppcode.cpp

產生文件mycppcode.o和命令

gfortran -c myfortrancode.f

產生文件myfortrancode.o

當我鏈接這兩個文件以獲得輸出文件時

g++ -O mycppcode.o myfortrancode.o

我收到以下錯誤

Undefined symbols for architecture x86_64:
  "__gfortran_pow_c8_i4", referenced from:

有人可以幫我嗎? 我應該使用其他編譯器嗎? 另外,我想知道什么函數或子例程稱為“ __gfortran_pow_c8_i4”,以便將來可以嘗試在fortran中避免使用這些函數或子例程。

以下假設您正在使用GNU編譯器工具。 如果使用其他編譯器,情況可能會略有不同。

您可以使用任一編譯器將兩者鏈接在一起,但是需要提供適當的庫。

通常,您可以使用

gfortran fortobj.o cppobj.o -lstdc++

要么

g++ fortobj.o cppobj.o -lgfortran

假設您使用的安裝程序中,兩個編譯器都知道彼此的庫(例如,如果您是通過linux存儲庫安裝的)。


對於OP,C編譯器來自XCode,而gfortran來自家釀 在那種情況下, gfortran知道g++庫(因為它們用於編譯編譯器),但是g++不知道gfortran庫。 這就是使用gfortran進行鏈接的原因,如上所述。 但是,要與g++鏈接,則需要在使用-L標志調用鏈接程序時將路徑添加到libgfortran。*。

g++ fortobj.o cppobj.o -L/path/to/fortran/libs -lgfortran

如果由於某種原因,您的gfortran編譯器不知道您的g++庫,您應該這樣做

gfortran fortobj.o cppobj.o -L/path/to/c++/libs -lstdc++

請注意,最終可執行文件不應有任何差異。 我不是編譯器專家,但是我的理解是,使用編譯器將對象鏈接在一起非常方便,可以使用與您使用的語言相關的適當庫來調用鏈接器(在UNIX之類的OS上為ld )。 因此,只要包含正確的庫,使用一個編譯器或另一個編譯器鏈接就無關緊要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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