Я читал онлайн, что должен взять мой существующий проект, который находится на стадии разработки, вывести из него общую библиотеку и использовать эту библиотеку для тестирования. То, что я планирую сделать, - это переместить всю мою текущую работу в новый проект eclipse с общей библиотекой, использовать это для тестирования на ходу, а также продолжить разработку в этом новом проекте общей библиотеки, который я буду использовать для тестирования и разработки. Однако, когда я нажимаю build для проекта общей библиотеки, так что я вижу, что изменения, которые я сделал там, компилируются вообще, я получаю
Вызов: Cross G++ Linker G++ -shared -o "libMatchingEngineLibrary.so"./src/Fill.o./src/GlobalMatchingEngine.o./src/Main.o./src/Order.o./src/OrderBook.o./src/SingleFifoMatchingEngine.o./src/SingleMatchingEngine.o
/usr/bin/ld:./src/Fill.o: перемещение R_X86_64_32S против 'vtable for Fill' не может использоваться при создании общего объекта; перекомпилировать с помощью -fPIC./src/Fill.o: не удалось прочитать символы: Bad value collect2: ld возвращен 1 статус выхода make: * [libMatchingEngineLibrary.so] Ошибка 1
Почему я даже не могу создать этот проект общей библиотеки, не говоря уже о том, чтобы начать его тестировать? Что я делаю не так? Должен ли я его построить? Хорошо ли, если я занимаюсь разработкой такого проекта совместно используемой библиотеки (что я хочу сделать только для удобства проведения тестирования и разработки параллельно)?
Изменение: класс Fill, упомянутый в ошибке, в алфавитном порядке является первым классом в проекте. Я строю, нажимая значок молотка на затмение.
Эта ошибка говорит точно, что вам не хватает. Перекомпиляция с флагом -fPIC
. Это позволит "Позиционировать независимый код", который вы, вероятно, должны понять, прежде чем пытаться создавать библиотеки общих объектов. Удачи!