Пытаетесь сделать исполняемый файл linux, который работает на всех дистрибутивах, а? Удачи ... Но я отвлекся ...
Вы хотите посмотреть на вывод флага -v
для g ++. Он показывает команды внутренней ссылки, выполняемые g ++ / ld. В частности, вы захотите проверить последнюю команду ссылки collect2
и все ее аргументы. Затем вы можете указать точные пути к библиотекам .a, с которыми вы хотите ссылаться. Вам также придется отслеживать статичные библиотеки всего. Мой libstdc ++. A находится в /usr/lib/gcc/x86_64-linux-gnu/4.4/libstdc++.a
разглагольствовать: моя самая большая жалоба на Linux - это испорченное состояние исполняемых файлов. Почему я не могу скомпилировать двоичный файл на одном компьютере, скопировать его на другой и запустить !? Даже дистрибутивы Ubuntu одного выпуска будут создавать двоичные файлы, которые не могут быть запущены в другом из-за несовместимости libc / libstdc ++ ABI
edit # 1 Я просто хотел добавить, что Скрипт на этой странице создает .png зависимостей исполняемых файлов .so. Это очень полезно при попытке сделать то, что вы описываете.
Имейте в виду, ldd <exename>
перечислит все зависимости в цепочке, а не только непосредственные зависимости исполняемого файла. Таким образом, даже если ваш исполняемый файл зависит только от omniorb.so, а omniorb.so зависит от libphread.so, в выводе ldd
это будет указано. Просмотрите справочную страницу readelf
, чтобы найти только непосредственные зависимости двоичного файла.
Еще один предмет, о котором следует знать. если omniorb.so зависит от libstdc ++., поэтому у вас не будет другого выбора, кроме как зависеть от той же самой библиотеки. В противном случае несовместимость ABI нарушит RTTI между вашим кодом и кодом omniorb.