2013-09-24 46 views
1

背景:我們使用最初開發於VAX/OpenVMS上的非常舊的Fortran代碼(F77),它允許自定義鏈接 - 即可以在庫中定義多個符號,但被賦予了強制鏈接器使用特定符號的能力。VS2010 /英特爾Fortran未找到多個定義的符號

使用VS2010和英特爾Fortran 2013,我正在尋找一種方式,讓鏈接器強制它使用來自特定庫中的符號(即MYSUBROUTINE),當它存在於多個庫中時。

我有一個混合的C++/Fortran項目。內部開發的庫不是我自己的,因此刪除未使用的子例程不是微不足道的。因此,爲什麼我正在尋找一種方法來強制VS2010/Intel Fortran 2013鏈接程序使用特定的子例程。

我想這個問題對我們來說並不是獨一無二的,因爲許多遺留的代碼庫,尤其是那些有很多Fortran的代碼庫,都必須有這個問題。

+0

我應該問題的根本原因是,即使我排除/ FORCE:MULTIPLE選項,鏈接器**永遠不會找到多重定義的符號,並且它始終創建一個.exe - 但它的隨機作爲到.exe是否會執行或有圖像問題。因此,能夠控制圖像中使用哪個子程序是巨大的。如何讓它找到一個你知道的多邊定義符號的任何建議也會有所幫助。謝謝! –

回答

1

當搜索庫(.lib)時,鏈接器將使用它找到的第一個匹配符號。圖書館按照明確的順序進行搜索。要爲特定符號優先使用不同的庫,請在鏈接命令行的早期指定庫(在早期的鏈接器>輸入> Visual Studio中的可執行項目的附加依賴項中列出)

如果跨多個子例程您需要選擇多個庫,那麼您將需要使用不同的方法,例如解壓縮庫並選擇要作爲單獨步驟的例程的對象代碼。

請注意,在搜索符號時,對象文件優先於庫。

乘法定義符號僅適用於對象文件(.obj)中的符號。

相關問題