<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429328&amp;view=findpost&amp;p=3874159</guid>
        <pubDate>Sat, 20 Aug 2022 10:23:49 +0000</pubDate>
        <title>Переопределение имен BINUTILS</title>
        <link>https://forum.sources.ru/index.php?showtopic=429328&amp;view=findpost&amp;p=3874159</link>
        <description><![CDATA[Majestio: Свою задачу сборки я решил. Хотя остались некоторые вопросы, которые не касаются именно моей задачи. Тем не менее, опишу сделанное - может быть кому-то поможет.<br>
<br>
<span class='tag-size' data-value='14' style='font-size:14pt;'><strong class='tag-b'>Касаемо ./configure</strong></span><br>
<br>
Скрипт <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">./configure</span></span> к <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">binutils</span></span> никакого отношения не имеет. Это файл, генерируемый системой сборки <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">autotools</span></span> (а именно <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">autoconf</span></span>). Достаточно часто <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">./configure</span></span> уже присутствует в архиве с исходниками в готовом виде. И кросс-компиляция настраивается просто указанием необходимых параметров.<br>
<br>
<span class='tag-size' data-value='14' style='font-size:14pt;'><strong class='tag-b'>Касаемо cmake и dlltool</strong></span><br>
<br>
<span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">cmake</span></span> о многих инструментах из <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">binutils</span></span> тулчейнов просто не знает. Это же и касается <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">dlltool</span></span> (специфичный инструмент для windows-цели, для генерации библиотеки импорта). О чем &quot;знает&quot; <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">cmake</span></span> - можно посмотреть, набрав:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">cmake --help-variables | less</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Как правило, это переменные вида:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">CMAKE_&#60;LANG&#62;_COMPILER</div><div class="code_line">CMAKE_&#60;LANG&#62;_COMPILER_AR</div><div class="code_line">CMAKE_&#60;LANG&#62;_COMPILER_RANLIB</div><div class="code_line">CMAKE_&#60;LANG&#62;_LINK_EXECUTABLE</div><div class="code_line">CMAKE_AR</div><div class="code_line">...</div></ol></div></div></div></div><br>
Но про <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">dlltool</span></span> или <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">windres</span></span> - там ничего нет&#33;<br>
<br>
Соответственно, в моем случае никакие манипуляции с параметрами <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">cmake</span></span> для кросс-компиляции нужного результата не дали. Пришлось смотреть и редактировать исходние конфигурационные файлы проекта, отвечающие за поиск <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">dlltool</span></span>. В результате получилось следующее. Мой скрипт сборки приобрел вид:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#!/bin/sh</div><div class="code_line">&nbsp;</div><div class="code_line">export MXE=/home/majestio/Dev/cross/mxe/usr</div><div class="code_line">export PATH=$MXE/bin:$PATH</div><div class="code_line">export TARGET=i686-w64-mingw32.shared</div><div class="code_line">&nbsp;</div><div class="code_line">$TARGET-cmake .. \</div><div class="code_line">&nbsp;-DCMAKE_BUILD_TYPE=&quot;Release&quot; \</div><div class="code_line">&nbsp;-DBUILD_SHARED_LIBS:BOOL=ON \</div><div class="code_line">&nbsp;-DCMAKE_INSTALL_PREFIX=$MXE/$TARGET \</div><div class="code_line">&nbsp;-DCMAKE_DLLTOOL=$MXE/bin/$TARGET-dlltool</div></ol></div></div></div></div><br>
А в конфигурационном файле проекта <strong class='tag-b'>shared_libs.cmake</strong> внес правку:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">-- shared_libs.cmake-old &nbsp; &nbsp;2020-02-08 07:30:54.000000000 +0300</div><div class="code_line">+++ shared_libs.cmake &nbsp; 2022-08-20 11:22:33.835154661 +0300</div><div class="code_line">@@ -10,7 +10,7 @@</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set(DLLTOOL OFF)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # mingw: If dlltool is found the def and lib file will be created</div><div class="code_line">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;find_program (DLLTOOL dlltool)</div><div class="code_line">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;find_program (DLLTOOL ${CMAKE_DLLTOOL})</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(NOT DLLTOOL)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; message(WARNING &quot;dlltool not found. Skipping import library generation.&quot;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; endif()</div></ol></div></div></div></div><br>
Это все и решило мою проблему. Библиотеки импорта стали генерироваться. Надеюсь кому-то поможет.]]></description>
        <author>Majestio</author>
        <category>C/C++: Прочее</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429328&amp;view=findpost&amp;p=3874135</guid>
        <pubDate>Fri, 19 Aug 2022 15:45:02 +0000</pubDate>
        <title>Переопределение имен BINUTILS</title>
        <link>https://forum.sources.ru/index.php?showtopic=429328&amp;view=findpost&amp;p=3874135</link>
        <description><![CDATA[Majestio: Буэонос диас, амигос&#33;<br>
<br>
Собственно вот какой вопрос ... Всем известно, что если в скрипте перед командой <strong class='tag-b'>./configure</strong> сделать такую объявку:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">export CC=clang</div><div class="code_line">export CXX=clang++</div></ol></div></div></div></div><br>
То последующие инструменты сборки постараются вместо компилятора GCC использовать clang. С этим всем понятно. <br>
<br>
Но возникла другая ситуация. Я использую кросс-компиляторы из проекта <a class='tag-url' href='https://mxe.cc' target='_blank'>mxe.cc</a> для сборки GUI-библиотеки <a class='tag-url' href='http://nanapro.org/en-us/' target='_blank'>nana</a>. Там система сборки базируется на <strong class='tag-b'>cmake</strong>. У каждого &quot;комплекта&quot; свой cmake. И вот смотрите мой скрипт:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#!/bin/sh</div><div class="code_line">&nbsp;</div><div class="code_line">export PATH=/home/majestio/Dev/cross/mxe/usr/bin:$PATH</div><div class="code_line">export TARGET=x86_64-w64-mingw32.shared</div><div class="code_line">&nbsp;</div><div class="code_line">export CC=$TAGRET-gcc</div><div class="code_line">export CXX=$TAGRET-g++</div><div class="code_line">export LD=$TAGRET-ld</div><div class="code_line">export DLLTOOL=$TAGRET-dlltool</div><div class="code_line">export DLLWRAP=$TAGRET-dllwrap</div><div class="code_line">export AS=$TAGRET-as</div><div class="code_line">export AR=$TAGRET-ar</div><div class="code_line">export RANLIB=$TAGRET-ranlib</div><div class="code_line">export NM=$TAGRET-nm</div><div class="code_line">export WINDRES=$TAGRET-windres</div><div class="code_line">export PKG_CONFIG=$TAGRET-pkg-config</div><div class="code_line">&nbsp;</div><div class="code_line">$TARGET-cmake .. -DCMAKE_BUILD_TYPE=&quot;Release&quot; -DBUILD_SHARED_LIBS:BOOL=ON</div><div class="code_line">make</div></ol></div></div></div></div><br>
По сути он запускает <strong class='tag-b'>x86_64-w64-mingw32.shared-cmake</strong>. Тот игнорирует все мои переопределения - я пробовал. Он сам находит нужные компиляторы из &quot;своего&quot; комплекта, а вот <strong class='tag-b'>dlltool</strong> не находит. Хотя в комплекте он есть, и называется он <strong class='tag-b'>x86_64-w64-mingw32.shared-dlltool</strong>. Поэтому пару вопросов:<br>
<br>
1) Какие из моих переопределений вообще неверные, ну кроме CC и CXX даже для <strong class='tag-b'>./configure</strong>?<br>
2) Как мне приручить <strong class='tag-b'>cmake</strong> к нужным мне переопределениям имен утилит из <strong class='tag-b'>binutils</strong>?]]></description>
        <author>Majestio</author>
        <category>C/C++: Прочее</category>
      </item>
	
      </channel>
      </rss>
	