Мне нужно создать единую общую библиотеку из нескольких объектных файлов. Допустим, что файл объекта Obj1.o
и Obj2.o
хранятся под obj_folder и оба используют общую функцию foo()
. функция foo()
определена в другом файле cpp и позволяет называть его foo.cpp. Объект foo.cpp также присутствует в obj_folder.Множественное определение символа при создании общей библиотеки со статическими библиотеками
Сценарий, как показано ниже:
In obj1.cpp
void func1()
{
int timestamp =foo();
}
in obj2.cpp
void func2()
{
int timestamp = foo();
}
Оба файла имеют свои obj1.o и obj2.o строить отдельно. То, что я думаю здесь, и obj1.o и obj2.o, статически создает код для foo(), а при построении компоновщика просто не может найти, с какого объекта он должен выбрать foo().
здание разделяемый объект project.so
я использую следующую команду -
gcc -shared -fPIC obj_folder/*.o -o project.so
здания общего объекта я вижу сообщение об ошибке -
Multiple definition of foo()
Как я могу решить этот символ столкновения и построить свою общую librray?
Нужны ли Obj1 и Obj2 собственные копии foo? Если это так, вы должны определить только одну копию (либо в obj1, либо в obj2, но НЕ для обоих), поместите прототип для foo в заголовок, используя ключевое слово 'extern' (и включите его, когда это необходимо). –
вы просто не можете определить 2 раза одну и ту же функцию в одной проге или lib. Вы действительно определили его 2 раза? Зачем? – Klaus
Я немного изменил свой вопрос. Я дал больше света на мое понимание ситуации. – user3401643