Я привожу ОС Ubuntu 14.04 до стандарта сборки. Цель состоит в том, чтобы заменить существующий строитель SUSE SLED 11 SP2. Но я ошибся, что мне трудно объяснить.Объяснение различия между g ++ на SUSE SLED 11 SP2 по сравнению с Ubuntu 14.04
Команда сборки, которая производит ошибку в
g++
-o
out/linux-rel/bin/PrtReporter
-fstack-protector
-m32
-Wl,-rpath,/local/out/linux-rel/bin
-l:libz.so.1.2.8
out/linux-rel/obj-static/prt/CrashReporter.o
out/linux-rel/obj-static/prt/LibArchiveWrapper.o
out/linux-rel/obj-static/utilities/RTSConfigUtilities.o
-Lout/linux-rel/bin
-Lout/linux-rel/bin
out/linux-rel/bin/libcurl.so
out/linux-rel/bin/libcurl.a
out/linux-rel/bin/libarchive.a
-lpthread
-lrt
-lxml2
В Ubuntu это приводит к ошибке связи. g ++ не может найти символы из libz.
Чтобы исправить это, я могу просто разместить -l: libz.so.1.2.8 после выхода/linux-rel/bin/libarchive.a. Это «выглядит» правильно, поскольку позволяет libarchive.a находить символы libz. то есть, я считаю, должен быть указан после библиотеки, которая зависит от них.
Но я не знаю, почему это необходимо на Ubuntu. Эта же команда отлично работает на SLED.
Любые идеи?
http://stackoverflow.com/questions/45135/why-does-the-order-in-which-libraries-are-linked-sometimes-cause-errors-in-gcc –
Полезная ссылка. Но это не объясняет разницу между Ubuntu и SLED для меня. –
А - Я слишком скоро заговорил. Ссылка, которую я нашел в приведенном выше, помогла ответить на мой вопрос. А именно http://stackoverflow.com/questions/7826448/linking-libraries-with-gcc-order-of-arguments - что приводит к https://wiki.ubuntu.com/NattyNarwhal/ToolchainTransition. Итак, это конкретные изменения Ubuntu, сделанные в ld? Необычный. –