К сожалению, я приостановил перенос программного обеспечения моего под OpenWRT из-за проблемы с привязкой, но для того, чтобы глубже проникнуть в вышеупомянутую проблему, мне нужно кратко дать вам некоторые сведения о моем программном обеспечении ,Перекрестный компилятор CMake/Linker для OpenWRT
Он состоит из трех модулей: LIB-1, LIB-2 и APP.
Я разрабатываю его под LUbuntu с Netbeans/C++ и CMake. Я скрещиваю компиляцию с помощью CMake (я успешно выполнил это руководство http://www.vtk.org/Wiki/CMake_Cross_Com … chain_file), и я построил toolchain и целевое изображение Generic-x86 OpenWRT с помощью последнего официального инструмента BUILDROOT (он работает под VirtualBox, как шарм).
Я установил CMAKE_LIBRARY_OUTPUT_DIRECTORY и CMAKE_RUNTIME_OUTPUT_DIRECTORY в общую папку ($ {CMAKE_BINARY_DIR}/bin), чтобы все двоичные файлы были включены в одну и ту же папку.
Теперь, я создаю проект для LUbuntu и внутри папки ouput, я нахожу LIB-1.so, LIB-2.so и APP, как и ожидалось. Затем я запускаю 'ldd' на APP, и я вижу, что он ссылается на LIB-1.so и LIB-2.so, как и ожидалось. В результате подробного вывода CMake я также вижу, что CMake устанавливает (как и ожидалось) RPATH, который указывает на '$ {CMAKE_BINARY_DIR}/bin'.
Теперь вдаваться в подробности выпуска ...
Я строю проект для OpenWRT и внутри выходной папки я найти все три файла, как и ожидалось. Затем я выполняю 'ldd' и 'objdump -x', и я вижу, что APP-ссылки на '../bin/LIB-1.so' и '../bin/LIB-2.so' (имя файла плюс относительный префикс пути !!!). Другое отличие состоит в том, что CMake (я не знаю, почему) не добавляет RPATH в командной строке соединения!
Чтобы получить APP, связанную с двумя библиотеками без относительного пути «../bin», я должен поместить два файла SO внутри папки связывания APP и вручную запустить компоновщик, лишив «../ bin/'и добавление' -Wl, -rpath, $ {CMAKE_BINARY_DIR}/bin '.
Может кто-нибудь объяснить мне:
1) Почему CMake связывает две платформы, используя различные параметры командной строки?
2) Как я могу связать с CMake avoind встраивание относительного пути SO?
3) Если ни один из читателей не использует CMake, может ли кто-нибудь сказать мне, существует ли дополнительный параметр для компоновщика G ++ для переноса относительных путей из ссылочных LIB?
спасибо!