Что значит не линковаться

Научите линковаться с chibios

Немного освоился с чибиосью, всё приколько, только она на мейкфайлах вся а я хочу как белый человек из qt creator’а прогать. Сделал себе qbs’ник и вроде всё билдится, но после загрузки на платку не работает.

Выяснил интересную особенность, если я собираю все объектники в один каталог то всё работает, а если ту же самую команду для линкера запускаю с путями по которым qbs сам объектники рассовывает (типа ./многобакаф/объектник.о ./другиемногобукаф/другойобъектник.о и т.д.) то оно линкуется, загружается на платку и не работает. При чём даже elf по размеру значительно отличается.

Собственно что это за фигня и как с ней бороться?

Апдейт: злобный флаг -flto превращает билд в тыкву если не передать первыми стартап-файлы. Кстати -fPIC так же всё портит.

Выложить свой qbs’ник?

Ну ок, после работы сделаю минимальный пример. Хотя неужели есть разница?

cast KivApple может ты подскажешь куда копать? Для меня как-то дико что линкеру не пофиг на расположение файликов.

Могу предположить, что линкеру на вход подаются не все объектные файлы, однако ошибки линковки не происходит из-за weak-символов (например, в embedded часто все обработчики прерываний так описаны как пустые функции, а в других файлах по мере необходимости переопределяются нормальными символами). Также ничто не зависит от startup-файла (ассемблерный код, который инициализирует стек и прыгает на main) и если он потеряется при линкровке, то тоже ошибок не будет.

Больше не подскажу, с ChibiOS всегда пользовался искоробочными Makefile. Кстати, у Qt Creator есть поддержка таких проектов. Надо просто как-то сдампить список исходных файлов и флагов компиляции в файлы со специальными именами в корне проекта (я для этого добавлял новые цели в Makefile) и IDE их подхватит.

Я нашел ответ в чем разница — порядок файлов при линковке. Но я так и не понял почему это может быть важно.

В embdedded первый файл должен быть специальный startup-файл, поскольку микроконтроллер ничего не знает про форматы исполняемых файлов и начинает выполнение кода с первой инструкции прошивки. Таким образом если подложить первым файлом не то, что нужно, то результат может получиться не очень.

Плюс опять же, повторюсь, weak символы могут по-разному разрешаться в зависимости от порядка линковки.

Не используешь link-time optimization, случайно? В GCC был баг из-за которого при включенном LTO startup-файл нужно передавать компоновщику до файлов с обработчиками прерываний.

Ааа ты гений, выпилил -flto и оно заработало!

Источник

Слово «линковаться»

Слово состоит из 11 букв, начинается на согласную, заканчивается на гласную, первая буква — «л», вторая буква — «и», третья буква — «н», четвёртая буква — «к», пятая буква — «о», шестая буква — «в», седьмая буква — «а», восьмая буква — «т», девятая буква — «ь», 10-я буква — «с», последняя буква — «я».

Как проверить порты на роутере или на свитче

НОВЫЕ КУМИРЫ & ГЕРОИ ЛИГИ В FIFA MOBILE 19.

Как линковать нанесенный урон по мобу

Написание слова «линковаться» наоборот

Как это слово пишется в обратной последовательности.

Написание слова «линковаться» в транслите

Как это слово пишется в транслитерации.

в латинской 🇬🇧 linkovatsya

Как это слово пишется в пьюникоде — Punycode, ACE-последовательность IDN

Как это слово пишется в английской Qwerty-раскладке клавиатуры.

k b y r j d f n m c z

Написание слова «линковаться» шрифтом Брайля

Как это слово пишется рельефно-точечным тактильным шрифтом.

Передача слова «линковаться» на азбуке Морзе

Как это слово передаётся на морзянке.

Произношение слова «линковаться» на дактильной азбуке

Как это слово произносится на ручной азбуке глухонемых (но не на языке жестов).

Передача слова «линковаться» семафорной азбукой

Как это слово передаётся флажковой сигнализацией.

Остальные слова из 11 букв

Какие ещё слова состоят из такого же количества букв.

Комментарии

Что значит слово «линковаться»? Как это понять.

У вас есть вопрос или вам нужна помощь?

Спасибо, ваш вопрос принят.

Ответ на него появится на сайте в ближайшее время.

Народный словарь великого и могучего живого великорусского языка.

Онлайн-словарь слов и выражений русского языка. Ассоциации к словам, синонимы слов, сочетаемость фраз. Морфологический разбор: склонение существительных и прилагательных, а также спряжение глаголов. Морфемный разбор по составу словоформ.

По всем вопросам просьба обращаться в письмошную.

Источник

Может ли GPL-приложение линковаться с закрытой библиотекой?

Есть программа под GPL. Можно ли в ней использовать закрытую бинарную библиотеку (dll/so)? Функционала нужно немного, но без нее программа работать не сможет. Знатоки подскажите пожалуйста. В гугле что-то зарылся.

v2 — yes
v3 — no
BSD — pohuy

А программа вся твоя или чужой код там?

врешь и не краснеешь

Если линковка динамическая ,то мне кажется, что можно, не?

правильный ответ такой: линковка с несвободной библиотекой нарушает GPL, если она не является системной или не входит в состав компилятора. В этом случае нужно вносить в лицензию специальное исключение, разрешающее линковку с этой бибилотекой (если у тебя используется сторонний GPL-код, тебе не повезло:)

с LGPL — да, динамическая линковка отметает многие разночтения

Тогда следующий вопрос к знатокам GPL — можно ли расспространять заранее нерабочий код под GPL? К примеру закоммитил ты себе на публичный сервер полурабочий (или недоделаный) проект, использующий библиотеку под GPL. Могут на тебя из-за этого подать в суд?

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

То-есть я могу написать вот такой код:

При этом в описании программы будет сказано, что она просто загружает произвольную библиотеку по выбору. Такой код не нарушает GPL?

предвидя следующий вопрос, отвечу, что если загруженная бибилотека окажется несвободной, ты нарушишь лицензию на свой же код. Три дня самобичевания

Да, завтыкал. то ЛГПЛ мона 🙂

только маленькое «но»: ты не можешь распространять такую программу (бмнарь) под GPL, но ни кто не мешает тебе _любой_ _свой_ код (даже вышепреведенный) залицензировать под GPL, а уж кто и как будет делать из него «бинарь» — не твоё дело.

>ты не можешь распространять такую программу (бмнарь) под GPL

То-есть вот этот написаный мною код уже нарушает GPL? Если да, то получается любой код с использованием dlopen()/dlsym() нарушает GPL.

что если загруженная бибилотека окажется несвободной, ты нарушишь лицензию на свой же код

Как вы можете смотря на код знать какая библиотека окажется загруженой у человека, который на другом конце земного шара его скачал и собрал? Мы пока говорим просто про код, вот этот конкретный код.

>Как вы можете смотря на код знать какая библиотека окажется загруженой у человека, который на другом конце земного шара его скачал и собрал?

в этом случае лицензию нарушит тот, кто запустит

я имел в виду «нет, не нарушает»

ты сам выше сказал про линковку с либами, за исключением системных и прочее. Или мы друг друга не поняли?

> в этом случае лицензию нарушит тот, кто запустит

Вот вам расширенный пример. Программа сканирует директорию и находит в ней 10 динамических библиотек. Она их последовательно открывает и вызывает оттуда одну функцию. У тут оказывается, что одна из тех 10 библиотек расспространялась под лицензией, несовместимой с GPL. Кого вести под суд, разработчика, который написал этот цикл, или же пользователя, который (самым преступным образом!) положил разные библиотеки в одну директорию?

>в этом случае лицензию нарушит тот, кто запустит

ненене, GPL ограничивает только распространение, а не использование.

1. Подать в суд на разработчика в любом случае никто не в праве (хотя такая программа вполне может быть вредоносной — это уже другая статья)

2. Если разработчик тролль, он может попробовать преследовать пользователя, но доказать что-либо вряд ли удастся

Итак мы выяснили:
a) Разработчик программы может полностью оформить работу со сторонней библиотекой только с помощью dlopen()/dlsym() оставаясь в рамках лицензии GPL.
б) Если вы скачали такую программу под GPL и просто её запустили — на вас могут подать иск в суд за нарушение лицензии GPL.

Интересный ход мыслей. Есть ещё мнения по этому поводу?

>Разработчик программы может полностью оформить работу со сторонней библиотекой только с помощью dlopen()/dlsym() оставаясь в рамках лицензии GPL.

этого не утверждалось. Если разработчик намеревается таким образом работать с какой-либо конкретной несвободной бибилотекой (а не просто брутфорсить все подряд), тогда он 100% нарушает свою лицензию (естественно, никто не может наказть его за это, разве что авторы GPL-кода, который он позаимствовал). В чем разница — в этом случае разработчик сознательно распространяет несвободную либу вместе с продуктом или требует ее наличия для работы программы

По-моему, вы все всё путаете.

В GPL шла речь о derivative work (далее DW). То есть, если ваш код есть DW от какого-то другого кода, лицензированного под GPL, то и ваш код обязан быть под GPL. LGPL делает исключение для случая, когда DW — программа, использующая динамическую библиотеку.

В вашем же случае, библиотека не является DW от вашего кода, строго наоборот. Поэтому, если лицензия на библиотеку не нарушена, то вы можете линковаться с закрытой библиотекой.

А ещё прошу вышеотписавшихся объяснить физический смысл выражения «разработчик нарушил свою лицензию». Это типа «обокрал/обманул сам себя»?

> разработчик сознательно распространяет

Не расспространяет и не требует. Как уже было сказано выше — просто выложил код на публичный сервер. И да — код под GPL, никоим образом его не нарушая.

>В вашем же случае, библиотека не является DW от вашего кода, строго наоборот.

именно так, но GPL-код не может быть DW от проприетарной бибилотеки, это нарушение

аналогично, GPLv2-код нельзя линковать с библиотекой под LGPL3 — это не нарушит LGPL3, но нарушит GPL2

именно так, но GPL-код не может быть DW от проприетарной бибилотеки, это нарушение

Где это сказано? Пожалуйста, точную цитату, я там такого не находил.

you should affix an explicit notice giving permission to link your program with them

Короче, надо себе это разрешить.

И да, этот faq не очень-то выдержан в букве GPL (хотя и соответствует духу).

>Короче, надо себе это разрешить.

не надо ерничать. Лицензия GPL в исходном виде здесь неприменима, если ты ее применяешь — ССЗБ

>Лицензия GPL в исходном виде здесь неприменима, если ты ее применяешь — ССЗБ

ещё раз — неприменима при распространении программы в бинарном виде (в комплекте с самой библиотекой?). Выложить для публичного доступа исходник — никаких проблем.

распространение этой библиотеки никоим боком не связано с проблемой

>распространение этой библиотеки никоим боком не связано с проблемой

да и хрен с ней =)

не надо ерничать. Лицензия GPL в исходном виде здесь неприменима

Не надо умничать. Что значит: «неприменима»? Столлман запретил? Как я уже сказал, букве лицензии это не соответствует, faq — не часть лицензии.

пожалуйста, применяй и нарушай ее требования, никто жаловаться не будет

А если сделать к этой закрытой библиотеке биндинг к DBus, и дергать ее функции через dbus? Как к этому отностся gpl?

Нет. В проприетарных драйверах nvidia и ati, например, есть связующая открытая обкладка, из которой вызываются GPL-ные интерфейсы ядра.

GPL говорит, что использовать открытый код в закрытом (т.е. ловить халяву) нельзя. Наоборот конечно можно, просто тогда эта программа будет открытой, но не свободной.

>>Наоборот конечно можно, просто тогда эта программа будет открытой, но не свободной.

Кхм.. это что-же получается: любые программы созданные под Виндоус уже сами по факту будут несвободными т.к. ВСЕ они линкуются ВСЕГДА с виндовыми *.dll ? O_o

т.е. Open Source для любых ОС отличных от *.nix — это мистика!? 🙂

>>они линкуются ВСЕГДА с виндовыми *.dll

Имею ввиду если в программе используется АПИ ОС.

Программа моя. Использует qscintilla, то есть линкуется с GPL библиотекой. Поэтому решили ее открыть под GPL.

Но эта же программа линкуется с нашей библиотекой, которую пока невозможно открыть под GPL.

Означает ли это, что наша закрытая библиотека тоже должна быть под GPL, либо ее нельзя использовать?

GPL распространяется на текущую и последующие работы, но не влияет на предыдущие.

Поясняю: библиотека гпл, программа закрыта — нельзя, т.к. программа — производная работа и нарушает лицензию библиотеки. Библиотека закрыта, программа — ГПЛ можно. См. реализацию всевозможного открытого софта на винапи.

Источник

Читайте также:  Что значит если парке
Оцените статью