簡體   English   中英

來自C ++源代碼的C-DLL

[英]C-DLL from C++ source

我的C ++框架有一個C-Wrapper。 由於這應該在mac和Windows上運行,因此我正在使用scons

env = Environment()
env.Append(CPPPATH = ['./'])
env.Append(LIBS = 'kernel32.lib')
env.Append(LIBPATH = 'C:/Program Files/Microsoft SDKs/Windows/v6.0A/Lib')

env.SharedLibrary(target='warpLib', source='warplib.cpp')

warplib.cpp和warplib.h的簡單版本如下所示:

warplib.cpp

#define DllExport __declspec( dllexport )
#include "warplib.h"

extern "C" {
  DllExport int foo(int a) {
    return a;
  }
}

warplib.h

#define DllExport __declspec( dllexport )

extern "C" {
  DllExport int foo(int a);
}

誰能告訴我這是怎么回事? 我嘗試了幾乎所有可能使用'extern“ C”的組合,但是它總是使我感到類似“錯誤C2732:鏈接規范與早期的'...'規范矛盾”。

如果我跳過'extern“ C”,它可以工作,但是看不到.lib文件,我很確定我需要它才能真正使用該庫。

您只需要在聲明中使用extern "C" 然后包括該標頭的任何人都將期望使用C鏈接標准而不是C ++裝飾的形式針對它進行鏈接。 所述warplib.cpp源文件,和隨后的對象文件將暴露函數foo正確如果warplib.h是包括在內。

使用MSVC時,有大量半有用的腳本,並提供了“構建環境”控制台快捷方式,並提供了許多與開發相關的環境變量和路徑。 我建議找到合適的腳本來執行以將這些變量插入您的環境中,或者運行開發控制台。

暫無
暫無

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

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