Я использую objcopy для преобразования текстового файла в объектный файл для связывания с моей DLL с помощью MinGW и MinGW-64. С MinGW все работает нормально, но с MinGW-64 я получаю ошибки формы «неопределенная ссылка на« binary_src_glsl_RGBtoHSV_glsl_end ». Исходный файл называется RGBtoHSV.glsl и находится в папке binary \ src \ glsl. В выводе objcopy имя переменной _binary_src_glsl_RGBtoHSV_glsl_end. Мой код для доступа к переменным для этого файла выглядит следующим образом:Включая двоичный blob из objcopy в MinGW 32 и 64
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, но это не повлияло. Насколько я могу судить, мои варианты заключаются в том, чтобы либо добавить подчеркивание к именам переменных, сгенерированным objcopy, с помощью «--prefix-symbol _» при создании для 32 бит MinGW, и в этом случае указанное имя переменной будет работать в 32 и 64 бит.
Есть ли еще одно решение этой проблемы? В идеале я хотел бы что-то вдоль линий
extern "C" fix_underscore_problem const char binary_src_glsl_RGBtoHSV_glsl_start;
Где fix_underscore_problem волшебная команда, чтобы исправить подчеркивание проблемы.
Update (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++ для этого?