+ 1 за каждый фрагмент информации, который помогает завершить всю картину. Вам не нужно знать весь ответ. Я буду так же признателен за отдельные части головоломки. Спасибо.
Я собираюсь попробовать мою первую кросс-компиляцию. Я искал как SO, так и в Интернете и нашел много фрагментов информации, но я не всегда знаю, как соединить эти фрагменты, потому что некоторые фрагменты все еще отсутствуют.
Мой хост: linux Kubuntu amd64.
Цель: linux kubuntu x86 (32 бита) (должно быть легко, нет?)
Инструменты: g ++ и cmake.
Вот информация, которую я нашел:
Как скомпилировать 32-разрядный двоичный файл на 64-разрядной машине Linux с помощью gcc / cmake
упоминает экспорт CFLAGS = -m32. Это одна часть.
Кроссплатформенность: выбор типов данных для использования 32/64 бит
упоминает типы данных. Возможно, мне придется обратить внимание на это в моем коде.
# ifdef для 32-битной платформы
#ifdef для 32-битной платформы
ссылки на следующее, хотя я еще не совсем уверен, как его использовать:
http://predef.sourceforge.net/prearch.html
http://ww.ubuntuforums.org/showthread.php?t=1377396
Я сделал: sudo apt-get установить g ++ - multilib
недостающие части:
В идеале, когда я делаю 'make' (с помощью cmake), он должен выдавать как двоичный файл amd64, так и x86.
Часть моего CMakeLists.txt выглядит так:
add_definitions(-Wall -pthread)
add_executable (../run.amd64 user.cpp time.cpp init.cpp utils.cpp main.cpp)
target_link_libraries(../run.amd64 cppcms dbixx config++ ctemplate)
Как ввести флаг -m32 для создания второго исполняемого файла?
Если я хочу сделать только один исполняемый файл (например, для тестирования и отладки), как я могу сказать cmake сделать один или оба двоичных файла?
Кроме того, вы можете видеть, что я использую некоторые сторонние библиотеки, некоторые из которых мне пришлось собирать самостоятельно. Означает ли это, что мне нужно также скомпилировать каждый из этих двоичных файлов для целевого хоста? Некоторые используют cmake, а некоторые используют: ./configure; сделать;
Как мне скомпилировать эти библиотеки для целевого хоста (флаги и т. Д.)?
Примечание: динамически связанные библиотеки уже скомпилированы и установлены на целевом компьютере, поэтому, возможно, мне не нужно беспокоиться об этом шаге ... Я не уверен: это одна из моих недостающих частей ...
Что мне нужно, это своего рода учебник или, по крайней мере, некоторые из пропущенных частей. Я обновлю этот пост с более подробной информацией о том, чего я достиг и как.
Спасибо.
приписка
Возможно ли это вообще?
Ища больше, я нашел это:
http://www.mail-archive.com/cmake@cmake.org/msg26265.html
«Оригинальный дизайн, похоже, не предназначен для чего-то большего, чем кросс-компиляции windows-linux или linux-windows».
cmake НЕ тестируется для linux amd64 для linux x86.
http://www.cmake.org/Wiki/CMake_Cross_Compiling#FAQ.2FPotential_Problems
«В смешанных 32/64-битных системах Linux кросс-компиляция не может быть использована для сборки только для 32/64-битных версий».
??