Привет всем! Подскажите, как можно (и можно ли) в c++ задать, как будет названа та или иная функция в импортируемом объектнике, и как задать имя экспортируемой функции, которое будет объявлено в объектном файле. Это нужно, чтобы линковать срр с асмом. В С, например, имя в объектнике ожидается/создаётся такое же, как и в исходнике при объявлении. Но это не позволяет использовать перегрузку параметров функций. Или, может, можно задать в nasm поддержку линковки с срр? На крайняк, может, есть какая-нибудь консольная утила, которая меняет названия экспортируемых объектов в объектниках? Тогда, правда, придётся ещё разбираться в том, как срр называет в них функции
а... для компиляции... вот он: Код (Text): #!/bin/sh clear echo '*****assembling go.asm' nasm -felf -o go.o go.asm echo '*****compiling init.cрр' gcc -c -o init.o init.cpp echo '*****compiling video.cрр' gcc -c -o video.o video.cpp echo '*****assembling intel.asm' nasm -felf -o intel.o intel.asm echo '*****linking' ld --oformat binary -Ttext 0x00000 -o system.bin go.o intel.o video.o init.o Этот?
censored, не позволяет, к сожалению, перегружать функции. Но я разобрался с тем, как гсс-срр называет функции, так что это ок. Всё-таки, разъясните мне, плиз, что же такое есть этот таинственный мейкфайл... я под никсами недавно, к тому же вокруг меня одни винды => с общей терминологией не знаком
1) makefiles в виндоус мало чем отличаются от makefiles в *никс , то, что Вы привели более похоже на make.bat, но тоже рабочий вариант . 2) из исходного вопроса я понял, что Вы из ассемблерного кода вызывается сишную (С++) функцию, так? не совсем понимаю в чем проблема, но все же предположу.... что мешает делать так? Код (Text): // C++ code extern "C" { void foo_void(void) {} void foo_int(int) {} void foo_str(const char *) {} } в таком случаем никакого манглежа функций не будет; они будут очень просто именоваться: _foo_void, _foo_int, _foo_str (или без подчеркивания -- не помню ), и никаких проблем с вызовом из асма быть не должно. если же я неправильно понял исходный вопрос, пардон
shi Можно переименовать *.cpp в *.c, если нет особой нужды в плюсах. Или линковать линкером g++. Символ __gxx_personality_v0 определён в стандартной либе C++.
Спец. скрипт, который интерпретируется make, и в котором содержится последовательность действий для получения нужных тебе файлов.
censored, разумеется, ничто не мешает . Я пока так и делаю. Это вопрос удобства. Только у меня они, почему-то, назвались так: _Z8foo_voidv,_Z7foo_inti,_Z7foo_strPc (последняя так - если без const) А фишки я не знал - спасибо. И спасибо всем за ответы!