我使用objcopy將文本文件轉換爲目標文件,以便使用MinGW和MinGW-64與我的DLL鏈接。使用MinGW,一切都正常,但是對於MinGW-64,我收到了「binary_src_glsl_RGBtoHSV_glsl_end'的未定義引用格式的錯誤。」原始文件名爲RGBtoHSV.glsl,位於二進制文件夾\ src \ glsl中。在objcopy的輸出中,變量名稱是_binary_src_glsl_RGBtoHSV_glsl_end。我的代碼訪問的變量該文件如下:在MinGW 32和64中包含objcopy的二進制blob
extern "C" const char binary_src_glsl_RGBtoHSV_glsl_start;
extern "C" const char binary_src_glsl_RGBtoHSV_glsl_end;
const std::string RGBtoHSV = std::string(&binary_src_glsl_RGBtoHSV_glsl_start, &binary_src_glsl_RGBtoHSV_glsl_end-&binary_src_glsl_RGBtoHSV_glsl_start);
如果我改變變量名,使他們在前面的undercore,如:
extern "C" const char _binary_src_glsl_RGBtoHSV_glsl_start;
然後該符號在發現MinGW-64,但不是MinGW(32位)。我確實嘗試了--remove-remove-leading-char選項來objcopy,但沒有任何效果。就我所見,我的選項是在爲MinGW 32位構建時使用「--prefix-symbol _」爲objcopy生成的變量名添加下劃線,在這種情況下,上述變量名將在32和64位。
有沒有解決這個問題的另一種方法?理想情況下,我想沿着
extern "C" fix_underscore_problem const char binary_src_glsl_RGBtoHSV_glsl_start;
線的東西在哪裏fix_underscore_problem是一個神奇的命令修復領先的下劃線問題。
更新(2012-07-01):使用Adding leading underscores to assembly symbols with GCC on Win32?給出的建議我通過改變頭文件使用
extern "C" const char binary_src_glsl_RGBtoHSV_glsl_start asm("_binary_src_glsl_RGBtoHSV_glsl_start");
這似乎是解決這個問題,但現在我不知道怎麼便攜本是。 MSVC中是否存在可用的等效語法或C++標準方法?