[CMake] Linking problems

David Cole david.cole at kitware.com
Thu Apr 16 16:20:47 EDT 2009


Looks to me like COREAUDIO and friends are set incorrectly. COREAUDIO should
be "-framework;Coreaudio" in order to use it as a framework with
target_link_libraries... (not the full path to the framework library
itself...)


On Thu, Apr 16, 2009 at 10:22 AM, John Dey <jsdey at optonline.net> wrote:

> Hi List,
>
> I am getting undefined symbols while linking up a program that I can create
> by hand (details shown below).  I think I have set cmake to duplicate but it
> can't find symbols.  Any help would be greatly appreciated.  Thanks.
>
> John
>
> Hand compile and link:
>
>
> g++ -O3 -Wall -g -D__GXX__  -D__LITTLE_ENDIAN__  -D__MACOSX_CORE__ -c
> Stk.cpp -o Release/Stk.o
> g++ -O3 -Wall -g -D__GXX__  -D__LITTLE_ENDIAN__  -D__MACOSX_CORE__ -c
> MidiFileIn.cpp -o Release/MidiFileIn.o
> g++ -O3 -Wall -g -D__GXX__  -D__LITTLE_ENDIAN__  -D__MACOSX_CORE__ -c
> RtMidi.cpp -o Release/RtMidi.o
> g++ -O3 -Wall -g -D__GXX__  -D__LITTLE_ENDIAN__  -D__MACOSX_CORE__ -o
> playsmf playsmf.cpp Release/Stk.o Release/MidiFileIn.o Release/RtMidi.o
> -lpthread -lm  -framework CoreAudio -framework CoreFoundation -framework
> CoreMidi
>
> CMakeLists.txt:
>
> project (playsmf)
> cmake_minimum_required(VERSION 2.6)
> add_definitions(-D__LITTLE_ENDIAN__ -D__MACOS_CORE__ -D__GXX__ -g -Wall
> -03)
> include_directories("${PROJECT_SOURCE_DIR}")
> add_executable(playsmf playsmf.cpp MidiFileIn.cpp RtMidi.cpp Stk.cpp)
> find_library(COREAUDIO CoreAudio "/usr")
> find_library(COREFOUNDATION CoreFoundation "/")
> find_library(COREMIDI CoreMidi "/")
> find_library(PTHREAD pthread "/")
> find_library(M m "/")
> target_link_libraries(playsmf ${COREAUDIO} ${COREFOUNDATION}
>                     ${COREMIDI} ${PTHREAD} ${M}
> )
>
> Error messages:
>
> Linking CXX executable playsmf
> Undefined symbols:
>  "RtMidiOut::initialize()", referenced from:
>      RtMidiOut::RtMidiOut()in RtMidi.cpp.o
>  "RtMidiOut::sendMessage(std::vector<unsigned char, std::allocator<unsigned
> char> >*)", referenced from:
>      _main in playsmf.cpp.o
>      _main in playsmf.cpp.o
>  "vtable for RtMidiOut", referenced from:
>      __ZTV9RtMidiOut$non_lazy_ptr in RtMidi.cpp.o
>  "vtable for RtMidiIn", referenced from:
>      __ZTV8RtMidiIn$non_lazy_ptr in RtMidi.cpp.o
>  "RtMidiIn::initialize()", referenced from:
>      RtMidiIn::RtMidiIn()in RtMidi.cpp.o
> ld: symbol(s) not found
> collect2: ld returned 1 exit status
> make[2]: *** [playsmf] Error 1
> make[1]: *** [CMakeFiles/playsmf.dir/all] Error 2
> make: *** [all] Error 2
>
> Cache:
>
> ########################
> # EXTERNAL cache entries
> ########################
>
> //Path to a program.
> CMAKE_AR:FILEPATH=/usr/bin/ar
>
> //Choose the type of build, options are: None(CMAKE_CXX_FLAGS or
> // CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.
> CMAKE_BUILD_TYPE:STRING=
>
> //Enable/Disable color output during build.
> CMAKE_COLOR_MAKEFILE:BOOL=ON
>
> //CXX compiler.
> CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++
>
> //Flags used by the compiler during all build types.
> CMAKE_CXX_FLAGS:STRING=
>
> //Flags used by the compiler during debug builds.
> CMAKE_CXX_FLAGS_DEBUG:STRING=-g
>
> //Flags used by the compiler during release minsize builds.
> CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
>
> //Flags used by the compiler during release builds (/MD /Ob1 /Oi
> // /Ot /Oy /Gs will produce slightly less optimized but smaller
> // files).
> CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
>
> //Flags used by the compiler during Release with Debug Info builds.
> CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g
>
> //C compiler.
> CMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc
>
> //Flags used by the compiler during all build types.
> CMAKE_C_FLAGS:STRING=
>
> //Flags used by the compiler during debug builds.
> CMAKE_C_FLAGS_DEBUG:STRING=-g
>
> //Flags used by the compiler during release minsize builds.
> CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
>
> //Flags used by the compiler during release builds (/MD /Ob1 /Oi
> // /Ot /Oy /Gs will produce slightly less optimized but smaller
> // files).
> CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
>
> //Flags used by the compiler during Release with Debug Info builds.
> CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g
>
> //Flags used by the linker.
> CMAKE_EXE_LINKER_FLAGS:STRING=
>
> //Flags used by the linker during debug builds.
> CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
>
> //Flags used by the linker during release minsize builds.
> CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
>
> //Flags used by the linker during release builds.
> CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
>
> //Flags used by the linker during Release with Debug Info builds.
> CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
>
> //Path to a program.
> CMAKE_INSTALL_NAME_TOOL:FILEPATH=/usr/bin/install_name_tool
>
> //Install path prefix, prepended onto install directories.
> CMAKE_INSTALL_PREFIX:PATH=/usr/local
>
> //Path to a program.
> CMAKE_LINKER:FILEPATH=/usr/bin/ld
>
> //Path to a program.
> CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make
>
> //Flags used by the linker during the creation of modules.
> CMAKE_MODULE_LINKER_FLAGS:STRING=
>
> //Flags used by the linker during debug builds.
> CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
>
> //Flags used by the linker during release minsize builds.
> CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
>
> //Flags used by the linker during release builds.
> CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
>
> //Flags used by the linker during Release with Debug Info builds.
> CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
>
> //Path to a program.
> CMAKE_NM:FILEPATH=/usr/bin/nm
>
> //Path to a program.
> CMAKE_OBJCOPY:FILEPATH=CMAKE_OBJCOPY-NOTFOUND
>
> //Path to a program.
> CMAKE_OBJDUMP:FILEPATH=CMAKE_OBJDUMP-NOTFOUND
>
> //Build architectures for OSX
> CMAKE_OSX_ARCHITECTURES:STRING=i386
>
> //isysroot used for universal binary support
> CMAKE_OSX_SYSROOT:PATH=/Developer/SDKs/MacOSX10.5.sdk
>
> //Path to a program.
> CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib
>
> //Flags used by the linker during the creation of dll's.
> CMAKE_SHARED_LINKER_FLAGS:STRING=
>
> //Flags used by the linker during debug builds.
> CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
>
> //Flags used by the linker during release minsize builds.
> CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
>
> //Flags used by the linker during release builds.
> CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
>
> //Flags used by the linker during Release with Debug Info builds.
> CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
>
> //If set, runtime paths are not added when using shared libraries.
> CMAKE_SKIP_RPATH:BOOL=OFF
>
> //Path to a program.
> CMAKE_STRIP:FILEPATH=/usr/bin/strip
>
> //If true, cmake will use relative paths in makefiles and projects.
> CMAKE_USE_RELATIVE_PATHS:BOOL=OFF
>
> //If this value is on, makefiles will be generated without the
> // .SILENT directive, and all commands will be echoed to the console
> // during the make.  This is useful for debugging only. With Visual
> // Studio IDE projects all commands are done without /nologo.
> CMAKE_VERBOSE_MAKEFILE:BOOL=OFF
>
> //Path to a library.
> COREAUDIO:FILEPATH=/System/Library/Frameworks/CoreAudio.framework
>
> //Path to a library.
> COREFOUNDATION:FILEPATH=/System/Library/Frameworks/CoreFoundation.framework
>
> //Path to a library.
> COREMIDI:FILEPATH=/System/Library/Frameworks/CoreMidi.framework
>
> //Path to a library.
> M:FILEPATH=/usr/lib/libm.dylib
>
> //Path to a library.
> PTHREAD:FILEPATH=/usr/lib/libpthread.dylib
>
> //Value Computed by CMake
> playAeolus_BINARY_DIR:STATIC=/Users/robo3/Music/MyProj/Play/PlayAeolus/bin
>
> //Value Computed by CMake
> playAeolus_SOURCE_DIR:STATIC=/Users/robo3/Music/MyProj/Play/PlayAeolus/src
>
> //Value Computed by CMake
> playsmf_BINARY_DIR:STATIC=/Users/robo3/Music/MyProj/Play/PlayAeolus/bin
>
> //Value Computed by CMake
> playsmf_SOURCE_DIR:STATIC=/Users/robo3/Music/MyProj/Play/PlayAeolus/src
>
>
> ########################
> # INTERNAL cache entries
> ########################
>
> //Advanced flag for variable: CMAKE_AR
> CMAKE_AR-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_BUILD_TOOL
> CMAKE_BUILD_TOOL-ADVANCED:INTERNAL=1
> //What is the target build tool cmake is generating for.
> CMAKE_BUILD_TOOL:INTERNAL=/usr/bin/make
> //This is the directory where this CMakeCahe.txt was created
> CMAKE_CACHEFILE_DIR:INTERNAL=/Users/robo3/Music/MyProj/Play/PlayAeolus/bin
> //Major version of cmake used to create the current loaded cache
> CMAKE_CACHE_MAJOR_VERSION:INTERNAL=2
> //Minor version of cmake used to create the current loaded cache
> CMAKE_CACHE_MINOR_VERSION:INTERNAL=6
> //Major version of cmake used to create the current loaded cache
> CMAKE_CACHE_RELEASE_VERSION:INTERNAL=patch 3
> //Advanced flag for variable: CMAKE_COLOR_MAKEFILE
> CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1
> //Path to CMake executable.
> CMAKE_COMMAND:INTERNAL=/Applications/CMake 2.6-3.app/Contents/bin/cmake
> //Path to cpack program executable.
> CMAKE_CPACK_COMMAND:INTERNAL=/Applications/CMake
> 2.6-3.app/Contents/bin/cpack
> //Path to ctest program executable.
> CMAKE_CTEST_COMMAND:INTERNAL=/Applications/CMake
> 2.6-3.app/Contents/bin/ctest
> //Advanced flag for variable: CMAKE_CXX_COMPILER
> CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1
> CMAKE_CXX_COMPILER_WORKS:INTERNAL=1
> //Advanced flag for variable: CMAKE_CXX_FLAGS
> CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_CXX_FLAGS_DEBUG
> CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_CXX_FLAGS_MINSIZEREL
> CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_CXX_FLAGS_RELEASE
> CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO
> CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_C_COMPILER
> CMAKE_C_COMPILER-ADVANCED:INTERNAL=1
> CMAKE_C_COMPILER_WORKS:INTERNAL=1
> //Advanced flag for variable: CMAKE_C_FLAGS
> CMAKE_C_FLAGS-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_C_FLAGS_DEBUG
> CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_C_FLAGS_MINSIZEREL
> CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_C_FLAGS_RELEASE
> CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_C_FLAGS_RELWITHDEBINFO
> CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
> //Result of TRY_COMPILE
> CMAKE_DETERMINE_CXX_ABI_COMPILED:INTERNAL=TRUE
> //Result of TRY_COMPILE
> CMAKE_DETERMINE_C_ABI_COMPILED:INTERNAL=TRUE
> //Path to cache edit program executable.
> CMAKE_EDIT_COMMAND:INTERNAL=/Applications/CMake
> 2.6-3.app/Contents/bin/ccmake
> //Executable file format
> CMAKE_EXECUTABLE_FORMAT:INTERNAL=Unknown
> //Advanced flag for variable: CMAKE_EXE_LINKER_FLAGS
> CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG
> CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL
> CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE
> CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO
> CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
> //Name of generator.
> CMAKE_GENERATOR:INTERNAL=Unix Makefiles
> //Start directory with the top level CMakeLists.txt file for this
> // project
> CMAKE_HOME_DIRECTORY:INTERNAL=/Users/robo3/Music/MyProj/Play/PlayAeolus/src
> //Advanced flag for variable: CMAKE_INSTALL_NAME_TOOL
> CMAKE_INSTALL_NAME_TOOL-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_LINKER
> CMAKE_LINKER-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_MAKE_PROGRAM
> CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_MODULE_LINKER_FLAGS
> CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG
> CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL
> CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE
> CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO
> CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_NM
> CMAKE_NM-ADVANCED:INTERNAL=1
> //number of local generators
> CMAKE_NUMBER_OF_LOCAL_GENERATORS:INTERNAL=1
> //Advanced flag for variable: CMAKE_OBJCOPY
> CMAKE_OBJCOPY-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_OBJDUMP
> CMAKE_OBJDUMP-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_RANLIB
> CMAKE_RANLIB-ADVANCED:INTERNAL=1
> //Path to CMake installation.
> CMAKE_ROOT:INTERNAL=/Applications/CMake 2.6-3.app/Contents/share/cmake-2.6
> //Advanced flag for variable: CMAKE_SHARED_LINKER_FLAGS
> CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG
> CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL
> CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE
> CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO
> CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_SKIP_RPATH
> CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_STRIP
> CMAKE_STRIP-ADVANCED:INTERNAL=1
> //Suppress Warnings that are meant for the author of the CMakeLists.txt
> // files.
> CMAKE_SUPPRESS_DEVELOPER_WARNINGS:INTERNAL=FALSE
> //uname command
> CMAKE_UNAME:INTERNAL=/usr/bin/uname
> //Advanced flag for variable: CMAKE_USE_RELATIVE_PATHS
> CMAKE_USE_RELATIVE_PATHS-ADVANCED:INTERNAL=1
> //Advanced flag for variable: CMAKE_VERBOSE_MAKEFILE
> CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20090416/2e5a4f2f/attachment-0001.htm>


More information about the CMake mailing list