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