Компиляция mp3lame проекта с помощью инструментов msys2 и cmake на windows - PullRequest
0 голосов
/ 16 ноября 2018

После многих попыток использования этих сценариев cmake я получил неопределенную ссылку, ссылающуюся на ошибки:

C:\msys64\tmp\ccRsIxEJ.ltrans0.ltrans.o:<artificial>:(.text+0x69a): undefined reference to `lame_init'
C:\msys64\tmp\ccRsIxEJ.ltrans0.ltrans.o:<artificial>:(.text+0x6aa): undefined reference to `lame_set_in_samplerate'
C:\msys64\tmp\ccRsIxEJ.ltrans0.ltrans.o:<artificial>:(.text+0x6b7): undefined reference to `lame_set_VBR'

Я думаю, cmake не может найти библиотеку mp3lame, которую я могу найти на "/mingw64/lib"

Вот два сценария cmake, которые я использую:

cmake_minimum_required(VERSION 3.1)
project(converter)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(THREADS_PREFER_PTHREAD_FLAG ON)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".so")
set(CMAKE_EXE_LINKER_FLAGS "-flto")
set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -O2 --std=c++14 -Wall -flto" )

enable_language(CXX)

find_package(Lame REQUIRED)
find_package (Threads REQUIRED)
set(LIBS ${LIBS} ${LAME_LIBRARIES} Threads::Threads)
include_directories(${LAME_INCLUDE_DIRS})
add_executable(converter src/converter.cpp src/pthreadmanager.cpp)
target_link_libraries(converter ${LIBS})

и второй, который должен найти слабые зависимости:

# - Try to find LAME
# Once done this will define
#
# LAME_FOUND - system has liblame
# LAME_INCLUDE_DIRS - the liblame include directory
# LAME_LIBRARIES - The liblame libraries

#find_path(LAME_INCLUDE_DIRS lame/lame.h HINTS /mingw64/include)
#find_library(LAME_LIBRARIES mp3lame HINTS /mingw64/lib)
#The previous two instructions do not work so I set LAME_INCLUDE_DIRS and LAME_LIBRARIES manually I even tried without the HINTS but still not working
set(LAME_INCLUDE_DIRS "/mingw64/include/lame")
set(LAME_LIBRARIES "/mingw64/lib")

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Lame DEFAULT_MSG LAME_INCLUDE_DIRS LAME_LIBRARIES)

list(APPEND LAME_DEFINITIONS -DHAVE_LIBMP3LAME=1)

mark_as_advanced(LAME_INCLUDE_DIRS LAME_LIBRARIES LAME_DEFINITIONS)

Моя папка lib содержит файлы libmp3lame.a и libmp3lame.dll.a

Скрипт отлично работает на Debian (linux), если вы знаете, как решить проблему, большое спасибо.

...