LINUX.ORG.RU

Компиляция программ использующие LLVM на Windows


0

1

Вечер добрый, хотелось бы узнать, каким образом скомпилировать свою программу использующую модули LLVM на Windows. Имеется компилятор написанный на GCC в Linux который использует front-end LLVM, все работает хорошо. Захотелось перевести компилятор на Windows. Установил себе MinGW, собрал из исходников LLVM через CMake, проверил, вроде работает нормально (попробовал скомпилировать тестовый файл в CLANG), но почему-то не собрался llvm-config, ладно думаю я, сделаю свою программу для запуска, выглядит следующим образом:

// Main
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <map>
#include <vector>
#include <list>

int main() {
	system("g++ Main.cpp -o Jobell -ldl -lrt -lffi -I C:/LLVM/llvm-3.0/include -DNDEBUG -D_GNU_SOURCE -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -g -O2 -fomit-frame-pointer -fno-exceptions -fPIC -Woverloaded-virtual -Wcast-qual -L C:/LLVM/llvm-3.0/build/lib -lpthread -lm -lLLVMMCDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreInfo -lLLVMSystemZCodeGen -lLLVMSystemZInfo -lLLVMSparcCodeGen -lLLVMSparcInfo -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmPrinter -lLLVMPowerPCInfo -lLLVMMipsAsmPrinter -lLLVMMipsCodeGen -lLLVMMipsInfo -lLLVMMSP430CodeGen -lLLVMMSP430AsmPrinter -lLLVMMSP430Info -lLLVMMBlazeAsmPrinter -lLLVMMBlazeCodeGen -lLLVMMBlazeInfo -lLLVMLinker -lLLVMipo -lLLVMInterpreter -lLLVMInstrumentation -lLLVMJIT -lLLVMExecutionEngine -lLLVMCppBackend -lLLVMCppBackendInfo -lLLVMCellSPUCodeGen -lLLVMCellSPUInfo -lLLVMCBackend -lLLVMCBackendInfo -lLLVMBlackfinCodeGen -lLLVMBlackfinInfo -lLLVMBitWriter -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMX86AsmPrinter -lLLVMX86Info -lLLVMAsmParser -lLLVMARMDisassembler -lLLVMARMAsmParser -lLLVMARMCodeGen -lLLVMARMAsmPrinter -lLLVMARMInfo -lLLVMArchive -lLLVMBitReader -lLLVMAlphaCodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMMCParser -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -lLLVMMC -lLLVMCore -lLLVMAlphaInfo -lLLVMSupport -L C:/LLVM/llvm-3.0/build/lib");
	return 0;
}

Но линковщик не находит ключи: -ldl -lrt -lffi. Попробовал убрать эти ключи, теперь выходят такие вот ошибки:
Main.cpp:1:0: warning: -fPIC ignored for target (all code is position independen
t) [enabled by default]
C:/LLVM/llvm-3.0/build/lib/libLLVMSupport.a(DynamicLibrary.cpp.obj):DynamicLibrary.cpp:(.text+0x2ae): undefined reference to `_imp__EnumerateLoadedModules@12'
C:/LLVM/llvm-3.0/build/lib/libLLVMSupport.a(Signals.cpp.obj):Signals.cpp:(.text+0x581): undefined reference to `_imp__SymSetOptions@4'
C:/LLVM/llvm-3.0/build/lib/libLLVMSupport.a(Signals.cpp.obj):Signals.cpp:(.text+0x5a1): undefined reference to `_imp__SymInitialize@12'
C:/LLVM/llvm-3.0/build/lib/libLLVMSupport.a(Process.cpp.obj):Process.cpp:(.text+0xc2): undefined reference to `GetProcessMemoryInfo@12'
collect2: ld returned 1 exit status

Вот собственно и вопрос, как мне заставить MinGW скомпилировать мою программу?

★★★

Последнее исправление: Int64 (всего исправлений: 1)

Для начала нужно заставить себя расставлять запятые и верно согласовывать падежи.

anonymous
()

сделаю свою программу для запуска, выглядит следующим образом:

Это какой-то новый вид извращений?

korvin_ ★★★★★
()
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <map>
#include <vector>
#include <list>

Какое умелое и эффективное использование возможностей С++!

buddhist ★★★★★
()

Интересная система сборки, надо Поттерингу предложить.

Kosyak ★★★★
()

КО говорит, что какая-то виндовая либа не подключена.

ЗЫ первая прога работает? там же ж std::system должен быть

frozenix ★★★
()
Ответ на: комментарий от frozenix

ну да у меня что-то подобное было в линуксе, поставил просто флаг -ldl и все заработало, а сейчас не находит эту библиотеку :( работает нормально, system находится вроде в cstdlib 2buddhist, просто скопировал все библиотеки которые использовались в одной программе, просто хотел проверить будет ли работать.

Int64 ★★★
() автор топика

Спрашивается, за каким лысым членом ты собирал llvm с cmake? ./configure; make под mingw прекрасно работают.

anonymous
()

Рецепт:

1. Не делайте такие программы для запуска, это полностью лишено смысла, используйте bat-файлы, хотя кончено забавно.
2. Вбивайте свои ошибки в гугл.

Гугл:
undefined reference to _imp__EnumerateLoadedModules

не хватает dbghelp.lib.

http://lists.cs.uiuc.edu/pipermail/llvmdev/2009-March/020730.html

user_2190
()
Ответ на: комментарий от Reset

***, 3.1415****, валяюсь под столом .....

Хех, 21 век, чтобы написать компилятор, компилировать программы уметь не надо.

user_2190
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.