LinuxForum.Fans
Тема

Помогите разобраться с компиляцией.

Автор: Vochatrak 23 сообщений 1786 просмотров
04.01.2015 02:08 #408118

В общем, решил научиться компилировать...
Собрать нужно 3 пакета: Dolphin-emu, pcsx2 и PPSSPP.

Начал с первого (Dolphin-emu).
Скачал стало быть (git clone), поставил зависимости и начал собирать (не представляя как это вообще делается).
В конце компиляции выдает ошибку:

text
/usr/bin/ld: cannot find -lLLVM-3.5.0
/usr/bin/ld: cannot find -lLLVM-3.5.0
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
Source/Core/DolphinWX/CMakeFiles/dolphin-emu.dir/build.make:1346: ошибка выполнения рецепта для цели «Binaries/dolphin-emu»
make[2]: *** [Binaries/dolphin-emu] Ошибка 1
CMakeFiles/Makefile2:775: ошибка выполнения рецепта для цели «Source/Core/DolphinWX/CMakeFiles/dolphin-emu.dir/all»
make[1]: *** [Source/Core/DolphinWX/CMakeFiles/dolphin-emu.dir/all] Ошибка 2
Makefile:147: ошибка выполнения рецепта для цели «all»
make: *** [all] Ошибка 2

LLVM в системе установлен. Чего ему не хватает?

04.01.2015 11:14 #408130
"Vochatrak" написал:
LLVM в системе установлен. Чего ему не хватает?

Cудя по названию: lLLVM-3.5.0 это libLLVM...

05.01.2015 00:44 · отредактировано #408330

Библиотека, скорее всего, есть, но, похоже, пакет llvm не содержит файла метаинформации (*.pc) для pkg-config.
P.S. А LLVM точно нужной версии?

Показать
text
$ llvm-config --libs --cflags
-I/usr/include  -DNDEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -O3 -fomit-frame-pointer -fPIC
-lLLVMIRReader -lLLVMAsmParser -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter -lLLVMHexagonCodeGen -lLLVMHexagonAsmPrinter -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMMBlazeDisassembler -lLLVMMBlazeCodeGen -lLLVMMBlazeDesc -lLLVMMBlazeAsmPrinter -lLLVMMBlazeAsmParser -lLLVMMBlazeInfo -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMPowerPCCodeGen -lLLVMPowerPCDesc -lLLVMPowerPCAsmPrinter -lLLVMPowerPCAsmParser -lLLVMPowerPCInfo -lLLVMSparcCodeGen -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMR600CodeGen -lLLVMR600Desc -lLLVMR600Info -lLLVMR600AsmPrinter -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMMCDisassembler -lLLVMMCParser -lLLVMInstrumentation -lLLVMArchive -lLLVMBitReader -lLLVMInterpreter -lLLVMipo -lLLVMVectorize -lLLVMLinker -lLLVMBitWriter -lLLVMMCJIT -lLLVMJIT -lLLVMCodeGen -lLLVMObjCARCOpts -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMRuntimeDyld -lLLVMExecutionEngine -lLLVMTarget -lLLVMMC -lLLVMObject -lLLVMCore -lLLVMSupport

05.01.2015 00:57 #408332

Vochatrak,
У вас какая версия LLVM?
А то тут пишут:

We require LLVM 3.4 minimum, so if the user has something older make sure to not attempt compiling.
05.01.2015 08:57 #408357

Я думаю, что имя библиотеки задано неправильно. Попробуйте в каталоге с ней
создать на нёе ссылку с этим именем: libllvm-3.5.0.so -> libllvm-3.5.0.so.1
если она так называется.

Пётр.

05.01.2015 09:52 #408363

Скорее

text
# ln -s libllvm-3.5.0.so libllvm.so
05.01.2015 13:19 #408390

Я ошибся с регистром, в моём случае будет правильно

text
ln -s libLLVM-3.5.so.1 libLLVM-3.5.0.so

если уж хочется подключать именно её.

Пётр.

05.01.2015 14:44 #408410

yars,Peter, вообще-то это пакетный менеджер должен делать. Это дистрозависимо, обычно необходимо ставить специальные dev пакеты.

А вы совсем не то подсказываете.

05.01.2015 14:55 #408413

drBatty, откуда нам знать, может, у ТС LFS :)
А так - да, это задача ПМ и головная боль майнтайнера.

05.01.2015 15:14 · отредактировано #408414

yars, в любом случае, вы советуете помойку, начиная с корня.

Зыж lfs у тса никак не может быть, раз он 'решил научиться'. Убунта какая-нить.

05.01.2015 21:25 · отредактировано #408488

Cудя по названию: lLLVM-3.5.0 это libLLVM...

В моем случае lib64llvm-3.5.0 (-dev то же, поставил)

Библиотека, скорее всего, есть, но, похоже, пакет llvm не содержит файла метаинформации (*.pc) для pkg-config.
P.S. А LLVM точно нужной версии?

Первое, я не понял.
А версия 3.5.0

yars,Peter,drBatty
Так, а какой вариант правильный? И чем мне это "аукнется" ежели сделаю симлинк?

Зыж lfs у тса никак не может быть, раз он 'решил научиться'. Убунта какая-нить.

Roca desctop fresh R5 x64

05.01.2015 21:42 · отредактировано #408490

Vochatrak, правильно пользоваться ПМом.

Аукнется тем, что обновление сотрет старый файл, и симлинк будет битый. Это будет не сегодня, а неизвестно когда, как обычно ВНЕЗАПНО.

Зыж, я угадал, в росе нужны дев пакеты ставить.

05.01.2015 22:23 · отредактировано #408502

Нашел в usr/lib64/ папку LLVM, симлинк делать на папку или какую то so-шку?

Добавил:
Я тут малость запутался...
[console]bash-4.3$ locate libLLVM-3.5
/usr/lib/libLLVM-3.5.so
/usr/lib64/libLLVM-3.5.so
/usr/lib64/llvm/libLLVM-3.5.0.so[/console]
Уткуда - куда делать симлинк?

07.01.2015 18:10 #408682
Vochatrak написал:
Нашел в usr/lib64/ папку LLVM, симлинк делать на папку или какую то so-шку?

Добавил:

Уткуда - куда делать симлинк?

Вам же drBatty сказал - правильно будет установить dev-пакет, там будет и symlink.
У меня это llvm-3.5-dev, установлен не был.

Пётр.

07.01.2015 19:14 #408693
"Vochatrak" написал:
Первое, я не понял

У многих пакетов есть файл (их формат - text/plain), в котором есть информация о конфигурации пакета, например, prefix, расположение заголовочных файлов, флаги препроцессора и т.п. Программа pkg-config читает эти файлы и может выдавать информацию о пакете. У некоторых пакетов есть свой аналог pkg-config.

07.01.2015 21:49 #408714

Peter
Я уже писал что -dev установил.

У многих пакетов есть файл (их формат - text/plain), в котором есть информация о конфигурации пакета, например, prefix, расположение заголовочных файлов, флаги препроцессора и т.п. Программа pkg-config читает эти файлы и может выдавать информацию о пакете. У некоторых пакетов есть свой аналог pkg-config.

И? Это как-то чиниться?
Кстати, простите что не выложил сразу...
[console]bash-4.3$ llvm-config --libs --cflags
-I/usr/include -DNDEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -O3 -fomit-frame-pointer -fPIC
-lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter -lLLVMIRReader -lLLVMAsmParser -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter -lLLVMHexagonCodeGen -lLLVMHexagonAsmPrinter -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter -lLLVMSparcDisassembler -lLLVMSparcCodeGen -lLLVMSparcAsmParser -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter -lLLVMR600CodeGen -lLLVMR600Desc -lLLVMR600Info -lLLVMR600AsmPrinter -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMJIT -lLLVMLineEditor -lLLVMMCAnalysis -lLLVMMCDisassembler -lLLVMInstrumentation -lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMProfileData -lLLVMMCJIT -lLLVMTarget -lLLVMRuntimeDyld -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMExecutionEngine -lLLVMMC -lLLVMCore -lLLVMSupport[/console]

P.S.Сереч вас есть пользователи Росы/Мегеи/Мандривы?

07.01.2015 22:45 · отредактировано #408727
"Vochatrak" написал:
Это как-то чиниться

Чинится. Указанием configure правильных опций командной строки, а именно вывода llvm-config с ключами --libs, --cflags по отдельности, например,

text
$ LIBS=$(llvm-config --libs) CFLAGS=$(llvm-config --cflags ./configure)
07.01.2015 23:47 #408733

yars
Всю команду целиком не приняла.

Показать
На llvm-config --libs выдала

[console]bash-4.3$ llvm-config --libs
-lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter -lLLVMIRReader -lLLVMAsmParser -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter -lLLVMHexagonCodeGen -lLLVMHexagonAsmPrinter -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter -lLLVMSparcDisassembler -lLLVMSparcCodeGen -lLLVMSparcAsmParser -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter -lLLVMR600CodeGen -lLLVMR600Desc -lLLVMR600Info -lLLVMR600AsmPrinter -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMJIT -lLLVMLineEditor -lLLVMMCAnalysis -lLLVMMCDisassembler -lLLVMInstrumentation -lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMProfileData -lLLVMMCJIT -lLLVMTarget -lLLVMRuntimeDyld -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMExecutionEngine -lLLVMMC -lLLVMCore -lLLVMSupport[/console]

на llvm-config --cflags

[console]bash-4.3$ llvm-config --cflags
-I/usr/include -DNDEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -O3 -fomit-frame-pointer -fPIC[/console]

на llvm-config --cflags ./configure

[console]bash-4.3$ llvm-config --cflags ./configure
-I/usr/include -DNDEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -O3 -fomit-frame-pointer -fPIC
llvm-config: error: components given, but unused
usage: llvm-config <OPTION>... [<COMPONENT>...]

Get various configuration information needed to compile programs which use
LLVM. Typically called from 'configure' scripts. Examples:
llvm-config --cxxflags
llvm-config --ldflags
llvm-config --libs engine bcreader scalaropts

Options:
--version Print LLVM version.
--prefix Print the installation prefix.
--src-root Print the source root LLVM was built from.
--obj-root Print the object root used to build LLVM.
--bindir Directory containing LLVM executables.
--includedir Directory containing LLVM headers.
--libdir Directory containing LLVM libraries.
--cppflags C preprocessor flags for files that include LLVM headers.
--cflags C compiler flags for files that include LLVM headers.
--cxxflags C++ compiler flags for files that include LLVM headers.
--ldflags Print Linker flags.
--system-libs System Libraries needed to link against LLVM components.
--libs Libraries needed to link against LLVM components.
--libnames Bare library names for in-tree builds.
--libfiles Fully qualified library filenames for makefile depends.
--components List of all possible components.
--targets-built List of all targets currently built.
--host-target Target triple used to configure LLVM.
--build-mode Print build mode of LLVM tree (e.g. Debug or Release).
--assertion-mode Print assertion mode of LLVM tree (ON or OFF).
Typical components:
all All LLVM libraries (default).
engine Either a native JIT or a bitcode interpreter.[/console]

и на llvm-config --libs ./configure
[console]bash-4.3$ llvm-config --libs ./configure
llvm-config: unknown component name: ./configure[/console]

соответственно.

Кстати в "родном" rpm.src есть три патча.
emu-4.0.2-gcc4.9.patch

text
diff -urN dolphin-emu-4.0.2/Source/Core/Common/Src/CommonFuncs.h dolphin-emu-4.0.2-patched/Source/Core/Common/Src/CommonFuncs.h
--- dolphin-emu-4.0.2/Source/Core/Common/Src/CommonFuncs.h    1985-08-13 23:00:00.000000000 +1100
+++ dolphin-emu-4.0.2-patched/Source/Core/Common/Src/CommonFuncs.h    2014-08-22 17:06:24.730625525 +1100
@@ -30,7 +30,12 @@
 #define b32(x)  (b16(x) | (b16(x) >>16) )
 #define ROUND_UP_POW2(x)    (b32(x - 1) + 1)
 
-#if defined __GNUC__ && !defined __SSSE3__ && !defined _M_GENERIC
+#ifndef __GNUC_PREREQ
+#define __GNUC_PREREQ(a, b) 0
+#endif
+
+#if (defined __GNUC__ && !__GNUC_PREREQ(4,9)) && \
+!defined __SSSE3__ && defined _M_X86
 #include <emmintrin.h>
 static __inline __m128i __attribute__((__always_inline__))
 _mm_shuffle_epi8(__m128i a, __m128i mask)

dolphin-emu-4.0.2-static.patch

text
diff --git a/Externals/SFML/CMakeLists.txt b/Externals/SFML/CMakeLists.txt
index 86c0864..7598af8 100644
--- a/Externals/SFML/CMakeLists.txt
+++ b/Externals/SFML/CMakeLists.txt
@@ -14,4 +14,4 @@ elseif(WIN32)
     set(SRCS ${SRCS} src/SFML/Network/Win32/SocketHelper.cpp)
 endif()
 
-add_library(sfml-network ${SRCS})
+add_library(sfml-network STATIC ${SRCS})
diff --git a/Source/Core/InputCommon/CMakeLists.txt b/Source/Core/InputCommon/CMakeLists.txt
index 76871e5..533e113 100644
--- a/Source/Core/InputCommon/CMakeLists.txt
+++ b/Source/Core/InputCommon/CMakeLists.txt
@@ -32,4 +32,4 @@ elseif(ANDROID)
                 Src/ControllerInterface/Android/Android.cpp)
 endif()
 
-add_library(inputcommon ${SRCS})
+add_library(inputcommon STATIC ${SRCS})

dolphin-emu-cmakepath.patch

text
diff -urN dolphin-emu-3.0.rev20120321/CMakeLists.txt dolphin-emu-3.0.rev20120321-patched/CMakeLists.txt
--- dolphin-emu-3.0.rev20120321/CMakeLists.txt    2012-03-21 12:18:48.000000000 +1100
+++ dolphin-emu-3.0.rev20120321-patched/CMakeLists.txt    2012-03-21 12:32:33.798271511 +1100
@@ -25,7 +25,7 @@
 else()
     set(bindir  ${CMAKE_INSTALL_PREFIX}/bin               CACHE PATH "bindir")
     set(datadir ${CMAKE_INSTALL_PREFIX}/share/dolphin-emu CACHE PATH "datadir")
-    add_definitions(-DDATA_DIR="${datadir}/")
+    add_definitions(-DDATA_DIR="/usr/share/dolphin-emu/")
 endif()
 set(userdir ".dolphin-emu" CACHE STRING "User directory")
 add_definitions(-DUSER_DIR="${userdir}")

Может быть их как-то нужно использовать? (или они не обязательны?)
И если нужно то как?

08.01.2015 07:29 #408743
"Vochatrak" написал:
Всю команду целиком не приняла

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

text
$ LIBS=$(llvm-config --libs) CFLAGS=$(llvm-config --cflags) ./configure

По поводу патчей - погодите пока, они пригодятся, но вы хоть без них соберите. А использовать их так: положите, скажем, в каталог patches рядом с каталогом с распакованными исходниками, перейдите в каталог с исхдниками и выполните:

text
$ patch -p1 --verbose ../patches/*.patch
08.01.2015 08:19 #408745
"yars" написал:
Ой, я последнюю закрывающую скобку не там поставил, надо было
$ LIBS=$(llvm-config --libs) CFLAGS=$(llvm-config --cflags) ./configure

только вот у ТС'а проект на cmake...

Войдите или зарегистрируйтесь, чтобы ответить.