[CMake] cmake create executable Undefined symbols for architecture x86_64:
Sean Wayland
seanwayland at gmail.com
Wed Jul 5 16:50:14 EDT 2017
I am attempting to write a cmakelists.txt file for an application.
The application has a couple of dependencies.
I have been able to build targets for the dependencies but when I try
and add an executable for the main application I encounter this error.
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Googling the error and looking on stack exchange suggests that I don't
have a main function in the implicit entry/start .
Where does it look for this function ?
Does that file need to be first in the list of sources ?
This function is included here :
${CATSMAT_DIR}/Application/CATSMAT_main.cpp
My cmake file is below.
Any advice would be appreciated I have been stuck here for a while!
Best Sean
#######################################
# CMAKE CATSTMAT
#######################################
cmake_minimum_required(VERSION 3.6.3)
set(CMAKE_CXX_STANDARD 14)
if(CMAKE_CONFIGURATION_TYPES)
set(CMAKE_CONFIGURATION_TYPES Debug Release)
endif()
if(UNIX)
add_definitions(-Wall -DGCC)
endif(UNIX)
##### RPATH SETTING #####
set(CMAKE_MACOSX_RPATH 1)
#if(APPLE)
# set (CMAKE_OSX_ARCHITECTURES "x86_64 i386")
# if (${CMAKE_SYSTEM_VERSION} VERSION_LESS 9.0.0)
# set (CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.4u.sdk)
# elseif (${CMAKE_SYSTEM_VERSION} VERSION_LESS 10.8.0)
# set (CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk)
# elseif (${XCODE_VERSION} VERSION_LESS 4.0.0)
# set (CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.6.sdk)
# else ()
# set (CMAKE_OSX_SYSROOT "macosx10.7")
# endif ()
# set (CMAKE_C++_FLAGS -mmacosx-version-min=10.4)
#endif(APPLE)
#
#if(WIN32)
# add_definitions(-DWINVER=0x0400 -DWIN32)
# if(${CMAKE_GENERATOR} STREQUAL "Visual Studio 6")
# add_definitions(-DVC6)
# elseif(${CMAKE_GENERATOR} STREQUAL "Visual Studio 8 2005")
# add_definitions(-DVC2005)
# endif(${CMAKE_GENERATOR} STREQUAL "Visual Studio 6")
#endif(WIN32)
############### BOOST LIBRARIES ###########
if (APPLE)
set(BOOST_ROOT "/usr/local/boost")
set(BOOST_FILESYSTEM_LIB /usr/local/boost/lib/libboost_filesystem.dylib)
set(BOOST_SYSTEM_LIB /usr/local/boost/lib/libboost_system.dylib)
else (NOT APPLE)
set(BOOST_ROOT "C:/local/boost_1_58_0")
set(BOOST_FILESYSTEM_LIB C:/local/boost_1_58_0/lib64-msvc-12.0)
set(BOOST_SYSTEM_LIB C:/local/boost_1_58_0/lib64-msvc-12.0)
endif (APPLE)
FIND_PACKAGE( Boost 1.58.0 REQUIRED )
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )
#######################################
# set directories, src and headers.
set (CATSMAT_DIR /Users/seanwayland/Desktop/CATSMAT-master/catsmat/catsmat )
set (libIMUSANT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../libIMUSANT)
set (LOKI_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../Loki)
set (SUFFIX_TREE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../SuffixTree)
set (GOOGLE_TEST_INC_DIR
${CMAKE_CURRENT_SOURCE_DIR}/../../googletest-master/googletest/include)
set (IMUSANT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../libIMUSANT)
set (LIBMUSICXML_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../libMusicXMLv3)
#### SET SOURCES EXPLICITLY #####
set(SRC
${CATSMAT_DIR}/Analysis/src/IMUSANT_contour_suffixtree_builder.cpp
${CATSMAT_DIR}/Analysis/src/IMUSANT_generalised_interval_suffixtree_builder.cpp
${CATSMAT_DIR}/Analysis/src/IMUSANT_interval_suffixtree_builder.cpp
${CATSMAT_DIR}/Analysis/src/IMUSANT_pitch_suffixtree_builder.cpp
${CATSMAT_DIR}/Analysis/src/IMUSANT_repeated_interval_substring.cpp
${CATSMAT_DIR}/Analysis/src/IMUSANT_t_repeated_substring.cpp
${CATSMAT_DIR}/Analysis/src/IMUSANT_VectorMapAnalysisTypes.cpp
${CATSMAT_DIR}/Application/CATSMAT_main.cpp
${CATSMAT_DIR}/Application/CATSMAT_menu.cpp
${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_chord.cpp
${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_collectionvisitor.cpp
${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_cp_matrix.cpp
${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_dyad_sequences.cpp
${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_dyadtuple_sequences.cpp
${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_sonority_sequences.cpp
${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_TrigramSequences.cpp
${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_TrigramSuffixTreeBuilder.cpp
${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_canonic_techniques_tools.cpp
${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_partdata.cpp
${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_processing.cpp
${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_score_profile.tpp
${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_score_splitter.cpp
${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_score_profile_special.cpp
${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_scoredata.cpp
${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_scoredatacollector.cpp
${CATSMAT_DIR}/Segmentation/IMUSANT_segment.cpp
${CATSMAT_DIR}/Segmentation/IMUSANT_set_of_segment.cpp
${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/src/IMUSANT_fixed_period_segmenter.cpp
${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/src/IMUSANT_partlist_ordered_by_part_entry.cpp
${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/src/IMUSANT_segmented_part_fixed_period.cpp
${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/src/SegmentedScoreFixedPeriod.cpp
${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_interval_profile_LBDM.cpp
${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_LBDM_segmenter.cpp
${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_segmented_note_vectors.cpp
${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_segmented_part_LBDM.cpp
${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_segmented_profile_vectors.cpp
${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_weighted_strength_vectors.cpp
)
# old version of adding source code
#set (SRCFOLDERS
# ${CATSMAT_DIR}/Analysis/src
# ${CATSMAT_DIR}/CounterpointAnalysis/src
# ${CATSMAT_DIR}/GeneralAnalysis/src
# ${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/src
# ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src
# ${CATSMAT_DIR}/Application
# ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src
# ${CATSMAT_DIR}/Segmentation
# ${CATSMAT_DIR}/Utilities
#)
set (INCFOLDERS
${libIMUSANT_DIR}
${CATSMAT_DIR}/Analysis/inc
${CATSMAT_DIR}/Application
${CATSMAT_DIR}/CounterpointAnalysis/inc
${CATSMAT_DIR}/GeneralAnalysis/inc
${CATSMAT_DIR}/Segmentation
${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/inc
${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/inc
${CATSMAT_DIR}/Utilities
${libIMUSANT_DIR}/DomainObjects/inc
${libIMUSANT_DIR}/Utilities/inc
${libIMUSANT_DIR}/FileProcessing/inc
${libIMUSANT_DIR}/Converters/MusicXML_v3
${libIMUSANT_DIR}/Converters/MusicXML_v3/inc
${libIMUSANT_DIR}/Converters/MusicXML_v3/shared/inc
${IMUSANT_DIR}/DomainObjects/inc
${IMUSANT_DIR}/Converters/MusicXML_v3
${IMUSANT_DIR}/Converters/MusicXML_v3/inc
${IMUSANT_DIR}/Converters/Shared/inc
${IMUSANT_DIR}/FileProcessing/inc
${IMUSANT_DIR}/FileProcessing/Analysis/Segmentation/FixedPeriodDetection/
${IMUSANT_DIR}/Utilities/inc
${SUFFIXTREE_DIR}
${LIBMUSICXML_DIR}/libmusicxml-3.00-src/src
${LIBMUSICXML_DIR}/libmusicxml-3.00-src/src/lib
${LIBMUSICXML_DIR}/libmusicxml-3.00-src/src/visitors
${LIBMUSICXML_DIR}/libmusicxml-3.00-src/src/parser
${LOKI_DIR}
${SUFFIX_TREE_DIR}
${GOOGLE_TEST_INC_DIR}
)
#foreach(folder ${SRCFOLDERS})
# set(SRC ${SRC} "${folder}/*.cpp") # add source files
#endforeach(folder)
#file (GLOB CORESRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${SRC})
## is this necessary I think target link directories might do the job ?
foreach(folder ${INCFOLDERS})
set(HEADERS ${HEADERS} "${folder}/*.h") # add header files
set(INCL ${INCL} "${folder}") # add include folders
endforeach(folder)
file (GLOB COREH RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${HEADERS})
#######################################
# set includes ( is this needed ? )
include_directories( ${INCFOLDERS})
set_source_files_properties (${COREH} PROPERTIES HEADER_FILE_ONLY TRUE)
#######################################
# set library target
#if(APPLE OR MSVC)
set(target catsmat)
# I don't know why these if statements are included they seem to do nothing '
#else(APPLE OR MSVC)
# set(target catsmat)
#endif(APPLE OR MSVC)
##if(MSVC)
## enable_language(RC)
## set(LIBCONTENT ${CORESRC} ${COREH}
${CATSMAT_DIR}/win32/libIMUSANT/libIMUSANT.rc)
##else(MSVC)
## set(LIBCONTENT ${CORESRC} ${COREH})
##endif(MSVC)
add_executable(${target} ${SRC} )
#### add include directories
include_directories ( ${INCFOLDERS} )
############### Targeted Libraries ###########
TARGET_LINK_LIBRARIES(${target} gtest)
TARGET_LINK_LIBRARIES(${target} ${BOOST_FILESYSTEM_LIB})
TARGET_LINK_LIBRARIES(${target} ${BOOST_SYSTEM_LIB})
TARGET_LINK_LIBRARIES(${target} libmusicxml2)
TARGET_LINK_LIBRARIES(${target} libIMUSANT)
set_target_properties (${target} PROPERTIES
FRAMEWORK TRUE
VERSION ${VERSION}
C_STANDARD 99
FRAMEWORK_VERSION ${VERSION}
PUBLIC_HEADER "${COREH}"
DEFINE_SYMBOL LIBMUSICXML_EXPORTS
MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${STRVERS}
MACOSX_FRAMEWORK_BUNDLE_VERSION ${SSTRVERS}
)
#######################################
# install setup
if(NOT APPLE)
install ( TARGETS ${target} ${TOOLS}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
FRAMEWORK DESTINATION "/Library/Frameworks" CONFIGURATIONS Release
PUBLIC_HEADER DESTINATION include/libmusicxml
)
endif(NOT APPLE)
--
www.seanwayland.com
Sean Wayland
More information about the CMake
mailing list