2013-07-17 38 views
2

我的用戶抱怨說他們必須在他們不擁有的機器上安裝linux線程構建塊,並且許多主機不希望我的最終用戶安裝intel線程構建塊,所以我想創建靜態版本的我的動態庫/插件/模塊/擴展(無論是一個可插入的C++程序/ dll/so的更正術語)。我發現對於Windows,我必須使用/ MT(多線程)而不是默認/ MD開關(多線程DLL),所以我的程序將沒有依賴關係(但是,Windows有一個併發容器庫,所以我不需要在那裏使用TBB)。在Linux(CentOS)中,g ++的等效切換到/ MT(VC++)是什麼?

我只是不知道什麼是相當於Linux是什麼?

或者是否有可以找出所有選項的.sln到makefile轉換器?

我在Windows上開發,但我的大多數最終用戶使用Linux,所以我想確保他們沒有任何負擔,我希望他們能夠使用我的開源版本非常舒適。

+0

/MTd指示鏈接器使用**多線程調試**運行時庫([見MSDN](http://msdn.microsoft.com/en-us/library/2kzt1wy3(v = vs 0.71)的.aspx))。 – Casey

+0

@Casey對不起,/ MD:S – Gizmo

+0

所以沒有人知道切換鏈接庫的依賴關係到可執行文件? – Gizmo

回答

1

Microsoft C++編譯器中的/MT標誌會導致鏈接器與靜態版本的C和C++運行時庫鏈接。 Microsoft提供運行時庫的靜態和動態版本,因此該選項可以有效地選擇要鏈接的哪一組庫。此標誌不影響與第三方庫的鏈接。

在Linux方面,你有-static選項告訴鏈接器使用靜態庫。這個選項不像Windows那樣是特定於庫的,它會影響所有庫。但是,如果使用此選項,則必須提供所需的所有庫的靜態版本,鏈接器不會自動轉換動態庫。這包括系統和運行時庫,它們並不總是以靜態庫的形式提供。它還包括英特爾TBB,如果英特爾不以此形式提供,那麼您可能需要將自己編譯爲靜態庫。

0

我猜你的意思是你的用戶必須在他們的Linux機器上安裝英特爾線程構建模塊(TBB)。如果您使用的是英特爾TBB功能,並且您的客戶必須編譯您的源代碼,那麼他們需要安裝英特爾TBB。另一種方法是爲您的客戶編譯源代碼,並僅向您提供解決方案二進制文件而不是源代碼 - 然後他們不必安裝TBB。

+0

我的二進制文件需要TBB庫存在系統中,這是我想要避免 – Gizmo

+0

'英特爾授予您一個非排他性的,不可轉讓的版權許可證(除下面指定的評估許可證外)作爲您開發的產品或應用程序的一部分。「 - [鏈接至英特爾重新分發tbb庫和dll](http://software.intel.com/zh-cn/tags/21728)。由此看來,您可以使用您的解決方案爲Linux平臺重新分配TBB庫。 – 2013-07-18 02:17:57

+0

我的意思是我希望它們與我的圖書館靜態鏈接.. – Gizmo