У меня проблема с символами статической библиотеки, пропущенными в связанном исполняемом файле. Вот описание моей проблемы:
У меня есть статическая библиотека, построенная из нескольких объектных файлов. Эти объектные файлы содержат несколько групп символов, связанных с:
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