Отсутствуют символы из статической библиотеки в связанном исполняемом файле

У меня проблема с символами статической библиотеки, пропущенными в связанном исполняемом файле. Вот описание моей проблемы:

У меня есть статическая библиотека, построенная из нескольких объектных файлов. Эти объектные файлы содержат несколько групп символов, связанных с:

  1. Набором функций и структур C (несколько объектных файлов). Назовем соответствующие символы символами уровня 1 .
  2. Набор классов-оболочек C ++ для этих функций и структур C (другой объектный файл). Назовем соответствующие символы символами уровня 2 .
  3. Набор классов-оболочек C ++, унаследованных от классов уровня 2 (другой объектный файл) с расширенной функциональностью. Назовем соответствующие символы символами уровня 3 .

Undeground C-код использует несколько других проектов и внешних библиотек. Некоторые из них статичны, поэтому в настоящее время эта библиотека также статична.

Библиотека связана с исполняемым файлом. В этом файле напрямую используются только символы level2 из библиотеки lib. Но для некоторых динамических библиотек, загружаемых этим исполняемым файлом во время выполнения, требуются символы level3 .

Проблема в том, что символы level3 по какой-то причине отсутствуют в этом исполняемом файле (одобрено nm).

Сама библиотека содержит все группы символов. Также есть еще один исполняемый файл, связанный с этой библиотекой, и он также содержит все группы символов. Основное различие между этими исполняемыми файлами заключается в том, что второй исполняемый файл (где представлены все символы) напрямую использует символы leve3 .

Весь проект построен с помощью CMake в конфигурации отладки (это означает, что опция "-g" представлены в командах g ++). Базовая ОС - GNU / Linux x86_64. Версия g ++ - 4.4.

Я ' Я проверил несколько похожих вопросов в StackOverflow, но не нашел приемлемого решения.

Я уже пробовал несколько вариантов связывания для решения проблемы (--export-dynamic, --whole_archive), но ни один из них не помогает.

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

Это командная строка, используемая для сборки исполняемого файла. Команда была сгенерирована CMake. Я только добавляю параметр --whole_archive, затем удаляю исполняемый файл и перезапускаю команду. Я также надеюсь, что вы извините меня за замену всех конкретных имен проектов на "???".

exec_name - имя исполняемого файла, о котором идет речь
--whole_archive), но ни то, ни другое не помогает.

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

Это командная строка, используемая для создания исполняемого файла. Команда была сгенерирована CMake. Я только добавляю параметр --whole_archive, затем удаляю исполняемый файл и перезапускаю команду. Я также надеюсь, что вы извините меня за замену всех конкретных имен проектов на "???".

exec_name - имя исполняемого файла, о котором идет речь
--whole_archive), но ни то, ни другое не помогает.

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

Это командная строка, используемая для создания исполняемого файла. Команда была сгенерирована CMake. Я только добавляю параметр --whole_archive, затем удаляю исполняемый файл и перезапускаю команду. Я также надеюсь, что вы извините меня за замену всех конкретных имен проектов на "???".

exec_name - имя исполняемого файла, о котором идет речь
.

exec_name - имя исполняемого файла, о котором идет речь
.

exec_name - имя исполняемого файла, о котором идет речь
/ usr / local / ssl / lib64

5
задан beduin 16 April 2011 в 13:12
поделиться