У вас есть набор дублированных символов, поступающих из вашей настраиваемой "стандартной библиотеки" liba
и сгенерированных встроенных символов, вставленных в librust.a
:
memset, memcpy, memmove, ecc, ecc
Возникла ваша проблемапотому что порядок объектных файлов имеет значение при связывании.
Если вы поставите librust.a
слишком рано в упорядоченной последовательности файлов для связывания, то файлы до librust.a
будут разрешать символы из librust.a
и файлы, следующие послеlibrust.a
разрешит те же символы из liba
, и это приведет к дублированию ошибок символов.
Чтобы избежать этой проблемы, поместите библиотеку Rust в конце объектных файлов для ссылки.
В файле makefile epsilon измените команды ссылки следующим образом:
RUST_LIB_DIR = <path_to_librust.a>
.SECONDARY: $(objs)
%.$(EXE):
@echo "LD $@"
$(Q) $(LD) $^ $(LDFLAGS) -L$(RUST_LIB_DIR) -l:librust.a -o $@
Этот рецептссылки успешно на моей стороне.Моя базовая epsilon/apps/main.cpp
аппаратура:
#include "global_preferences.h"
#include "apps_container_storage.h"
extern "C" int hello_world(int a, int b);
void ion_main(int argc, char * argv[]) {
hello_world(1,2);
...