簡體   English   中英

在Windows上分發(本機C ++)庫

[英]Distributing (native C++) libraries on windows

我想與第三方共享使用本機C ++編寫的庫。 我的意思是說,我想與一個不希望與之共享源代碼的使用Windows的人共享一個庫,該庫提供了我開發的功能。 我們可以在這里假設相同的CPU架構。

我只直接共享源代碼,而且大多數情況下是在Linux上。 因此,確保我可以提供盡可能通用的二進制文件的標准過程對我來說是一個謎。 而且我發現缺少在線文檔。

我目前正在共享.lib文件,但是這似乎暗示着只有鏈接到該編譯器的編譯器與生成該lib文件的編譯器相同時,這些文件才起作用。

更常見的方法似乎是動態鏈接路由-提供一個.dll。 我不是非常喜歡這樣做的開銷,因為似乎我的函數和類簽名看起來像這樣__declspec(dllexport) void __cdecl Function1(void); 當我打算保持跨平台兼容性時,我可以想象我的源代碼越來越多地陷入條件編譯之中。 此外,除非我走了運行時鏈接路線,否則我將不得不提供一個導入庫.lib,這使我回到了以前的問題。

是否有在Windows上分發庫的指南? DLL的運行時鏈接是唯一可行的方法嗎? 而且可靠嗎? (會想到運行時庫沖突的問題)。

“導出”將在不同的編譯器和標准庫實現中可靠運行的C ++類的最簡單方法是使用cppcomponents https://github.com/jbandela/cppcomponents

該庫僅是頭文件,因此不需要構建。 它可以在Linux和Windows上運行,並且不需要任何導入庫。 但是,它確實需要功能強大的C ++ 11編譯器(gcc 4.7.2,clang 3.2,Visual Studio 2013都可以運行)。

  • 它支持std :: string,vector,tuple以及其他標准類型。
  • 它支持異常。
  • 它還支持std :: function之類的對象,可以在不同的編譯器之間使用。
  • 還內置了對事件的支持,這些事件應使觀察者模式更易於實現。

該庫是根據Boost許可發布的,因此對於商業和開源使用都是免費的。

有關使用它的示例,請看一下我對類似問題https://stackoverflow.com/a/19592553/1858436的 stackoverflow答案

在您的庫中使用此庫將允許從Visual C ++(調試和發行版以及將來的版本)以及GCC中使用單個二進制文件。 否則,您將不得不支持調試版本,發行版本和GCC版本,並且當出現新版本時必須為該版本重建。

如果您有具體的小例子,我可以為您提供幫助。

暫無
暫無

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

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