Я работаю над проектом, который изменяет поток управления пользовательской программой. Я использую llvm для этого. В конце я создаю набор файлов .s, используя clang ++. Затем я использую g ++, чтобы объединить их все. Я не могу использовать clang ++ (вместо g ++), так как он дает много ошибок на этом этапе (это не текущая проблема)
Для программ на c (gcc и clang) все работает отлично. Но для пользовательского кода c ++ (g ++, clang ++) я получаю следующую ошибку при выполнении
g++ -O3 -rdynamic *.s -o main.exe -Wa,-Iressource -lstdc++ -lm -ldl
/tmp/ccUdIbL3.o:(.ctors+0x0): undefined reference to `global constructors keyed to a'
/tmp/cch9k7on.o: In function `global constructors keyed to a':
_GLOBAL__I_a.optin:(.text.startup+0x1): undefined reference to `__cxx_global_var_init'
/tmp/ccvYrG8J.o:(.ctors+0x0): undefined reference to `global constructors keyed to a'
/tmp/cccPFs4G.o:(.ctors+0x0): undefined reference to `global constructors keyed to a'
Согласно моему поиску в Интернете, для большинства людей эта ошибка произошла, потому что они используют Clang (вместо Clang ++).
лязг
лязг — версия
Clang версия 3.1 (филиалы / release_31)Цель: x86_64-unknown-linux-gnu
Модель потока: posix
г ++
g ++ — версия
g ++ (Ubuntu / Linaro 4.7.3-1ubuntu1) 4.7.3
Я понятия не имею, где настоящая проблема. Но я знаю, что если я просто использую clang ++ для генерации файлов * .s, а затем использую g ++ (без прохождения llvm), это работает нормально. Поскольку он не будет жаловаться до конца, тогда как g ++ делает, я не знаю, где произошла настоящая ошибка. Как я уже говорил ранее, если исходный код был «C» (с использованием clang и gcc), он работает нормально.
Любая помощь о том, как действовать или решение для решения проблемы приветствуется.
Особенно к чему может привести (в этом контексте)
Задача ещё не решена.
Других решений пока нет …