http://community.activestate.com/node/7011Связывание с tcl85.lib с SWIG через МСВС (генерируется автоматически с помощью CMake)
Это вроде как тот бедняга Shang (можно использовать главу гендерно нейтрально?) Там в ссылке, за исключением того, что это еще один год, и у меня есть МСВС 2012.
подробности
CMake разместила C: ... \ Tcl \ Lib \ tcl85.lib в списке зависимостей для моего бинарная (я проверил в сгенерированном .vcproj файл - это там). Тем не менее, ошибки компоновщика многочисленны и формы:
nativeTCL_wrap.obj: ошибка LNK2019: неразрешенный внешний символ __imp__Tcl_ [некоторые-имя-команды] ссылается функция _SWIG_Tcl_ [некоторые-другие-command- имя].
Таким образом, я проверяю файл заголовка, как указано в списке зависимостей для моего проекта в MSVS: версия #define
как 8.5. Это соответствует библиотеке, к которой я пытаюсь подключиться. Я попытался изучить tcl85.lib с помощью ходунки зависимостей. По-видимому, он не может исследовать этот файл. Я побежал dumpbin.exe на него ... И файл .lib имеет все недостающие функции, но в следующей форме:
__imp_Tcl_ [некоторые-имя-команды]
В нем есть все символы ... Но в каждом из них есть символ подчеркивания!
Затем я исследовал файл libtcl85.dll.a, данный Tcl дистрибутива ActiveState, используемый в Cygwin, а символы выглядят следующим образом:
__imp__Tcl_ [некоторое-имя-команда]
Итак, у есть дополнительное подчеркивание, и двоичные ссылки правильно на Cygwin.
...
Это серьезно один из тех моментов, когда я выбрасываю свои руки в воздухе и мышления, «Что делать?» во всей своей упрощенной грамматически прикрученной славе. Тот же файл интерфейса swig с тем же CMake генерирует модуль в Cygwin. Но разработка Cygwin - это боль в заднице из-за того, насколько он медленный (строит почти в 5-8 раз больше, чем в более родных системах Windows-ish).
Что происходит дальше?
Я пытаюсь убедить Swig генерировать с зависимостями с одним меньшим подчеркиванием? Если да, то как? Я сдаюсь и отправляю отчет об ошибке? Если да, то где? Это ошибка в ActiveState Tcl? Это ошибка в Swig? Разве это не ошибка, и я просто ввернута?
Из-за отсутствия подчеркивания королевство было потеряно?
Множества инструментов получает значительно более сложным, когда вы получил несколько архитектур. В течение очень долгого времени это не было типичной проблемой для Windows, поэтому «мудрость сообщества» по этой теме довольно низкая, но в наши дни у вас есть 32-разрядная и 64-разрядная архитектуры в игре (оба поддерживаются компиляторами !), и поэтому уродливые детали обнажаются. (Вы не можете смешивать 32-битный и 64-битный код, вызывающие между ними, - в том же двоичном коде без трюков, далеко выходящих за пределы нормальных уровней, и мы, как правило, не будем беспокоиться о такой дикости в реализации Tcl ...) –
Предположим, вы бы знали, является ли подчеркивающая вещь широко используемой деталью? Могу ли я увидеть его в других двоичных файлах? Знаешь, так что я мог бы раньше признать это раньше, а не набирать огромный подробный вопрос о том, чтобы понять, через несколько минут, что-то нехорошо глупо. > _ < – user
@ DonalFellows Все еще узнает, как работает SO - так что, пожалуйста, простите теги с именами на месте. Я также не могу редактировать свои комментарии ... Фактическое содержимое сообщения находится в предыдущем сообщении. – user