Ошибка c ++ при компиляции с использованием clang ++ и g ++

Я работаю над проектом, который изменяет поток управления пользовательской программой. Я использую 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), он работает нормально.

Любая помощь о том, как действовать или решение для решения проблемы приветствуется.

Особенно к чему может привести (в этом контексте)

  1. неопределенная ссылка на __cxx_global_var_init
  2. глобальные конструкторы привязаны к

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]