Я написал хакерскую программу, которая пытается связаться с удаленным сервером. Я смог успешно скомпилировать для цели C ++. Исполняемый файл прекрасно работает в моей системе. Тем не менее, когда я пытаюсь запустить то же самое в другом окне Windows, это не удается со следующей ошибкой
Ошибка: не удалось загрузить модуль std @ socket_init__0
Затем я установил haxe и hxcpp, которые работали как шарм. Я был в состоянии запустить exe. Теперь я понимаю, что есть зависимость от hxcpp.
Это все еще не решило мою проблему, так как я хочу создать отдельное приложение. После некоторых исследований я нашел файл (ExampleMain.CPP) со следующими инструкциями, которые, я думаю, могут решить мою проблему. Однако я новичок и не совсем следую. Может ли кто-нибудь помочь мне с этим? Спасибо
ExampleMain.CPP
Это пример основной линии, которую можно использовать для связи статической версии.
Для начала вам нужно собрать статическую версию стандартных библиотек:
CD $ HXCPP / время выполнения
haxelib run hxcpp BuildLibs.xml -Dstatic_link
Затем статическая версия вашего приложения с помощью (примечание: дополнительный пробел перед static_link ‘):
haxe -main YourMain -cpp cpp -D static_link
Затем вам нужно связать вышеуказанные библиотеки с этим (или измененной версией) main.
Вы можете создать проект VisualStudio и добавить библиотеки из
$ HXCPP / bin / Windows / (std, regexp, zlib) .lib и библиотека вашего приложения.
Также обратите внимание, что если вы скомпилируете с флагом -debug, у вашей библиотеки будет другое имя.
Связывание из командной строки для Windows (user32.lib требуется только для отладочной версии):
cl ExampleMain.cpp cpp / YourMain.lib $ HXCPP / bin / Windows / std.lib $ HXCPP / bin / Windows / zlib.lib $ HXCPP / bin / Windows / regexp.lib user32.lib
От других ОС команда compile + link будет отличаться. Вот один для Mac:
g ++ ExampleMain.cpp cpp / Test-debug.a $ HXCPP / bin / Mac / regexp.a $ HXCPP / bin / Mac / std.a $ HXCPP / bin / Mac / zlib.a
Если вы хотите добавить другие статические библиотеки помимо этих 3 (например, nme), вы будете
нужно также скомпилировать их с флагом «-Dstatic_link» и вызвать их вызов init «register_prims». Включение дополнительной статической библиотеки потребует библиотеки
в строке ссылки, и может потребовать дополнительных зависимостей для связи.
Также обратите внимание, что могут возникнуть последствия для лицензирования со статической связью
сторонние библиотеки.
Я не уверен, но кажется, что вы делаете те же самые дополнительные шаги, которые hxcpp уже сделал для вас. Когда вы компилируете свое автономное приложение, оно на самом деле автономно и не зависит от hxcpp per se — но оно зависит от стандартных библиотек в hxcpp, которые вы, возможно, использовали. Например, если вы используете регулярные выражения, вам понадобится regexp.dll, который есть у hxcpp, как вы заметили. Стандартная библиотека haxe находится в std.dll, а zlib — если вы использовали сжатие из zip-пакетов.
Если я не ошибаюсь, по умолчанию динамическая ссылка на эти компоненты. Чтобы ваше приложение было автономным, как вы предлагаете, вам просто нужно скопировать эти dll вместе с вашим двоичным файлом.
Если вы хотите связать эти библиотечные компоненты статически, автоматически из кода haxe, просто import
типы из cpp.link пакет. Это указывает hxcpp автоматически выводить свои библиотеки как часть компиляции, связывая его статически в ваш двоичный файл, а не динамически. Никаких дополнительных шагов не требуется!
Короткий ответ: добавлять import cpp.link.StaticStd;
и любые другие компоненты библиотеки в пакете ссылок где-то к вашему коду. Это может быть где угодно, пока оно импортировано, оно будет связано в.
Других решений пока нет …