На этом этапе в звездочке вы пытаетесь создать динамическую библиотеку. Так как эта динамическая библиотека может быть загружена в любом месте памяти, все должно быть перемещено. Флаг -fPIC
означает независимый от позиции код, код сделан независимым от места загрузки - загружается где угодно.
Как часть этой динамической сборки lib звездочки, он пытается ввести интерпретатор Lua. Поскольку он переносится в динамическую библиотеку, ему нужно все скомпилированное PIC. Но вы используете статическую библиотеку lua, которая не была собрана с -fPIC. Это отвергает это, поскольку объекты lua в статической lib не могут быть перемещены.
Кстати, именно поэтому добавление -fPIC
к сборке звездочки не поможет. Несовместимы не ваши объекты кода звездочки (что может повлиять на -fPIC), а liblua.a, в частности, объекты, переносимые liblua.a (например, lapi.o). Кроме того, в этот момент вы создаете динамическую библиотеку, и я уверен, что у вас уже есть перемещаемые флаги кода, такие как -fPIC для объектов звездочки, которые вы пытаетесь собрать вместе в этот момент.
Я вижу три решения.
Одним из них является исключение Луа из вашей сборки. Если вам это не нужно конкретно и вы думаете, что "с этим будет весело играть позже", вы сможете и не потеряете нужные функции.
Другой способ - получить динамическую версию liblua, liblua.so
, на которую можно ссылаться в вашей сборке звездочки. Я не знаю ваш дистрибутив, поэтому не могу сказать, как его получить.
Другой, более болезненный в заднице, это восстановить lua и liblua.a с -fPIC. У вас могут быть проблемы с совместимостью, возможно, из-за несовместимых флагов сборки (что вы сделали и что еще находится на диске), поэтому я думаю, что поиск liblua.so, соответствующий вашему текущему встроенному lua, является лучшим вариантом.
Если вы найдете liblua.so, вы можете посмотреть флаг связывания '-rpath' для этого, в частности, '-Wl, -rpath,/path/to/lua/libs'