jeudi 19 décembre 2019

Missing clang compiler flag for x86_64

I have a project with the following included within the source:

extern module_entry_info
    cm_entry_singlediode,
    cm_entry_singlediodeparams,
    cm_entry_iec61853par;

static module_entry_info *module_table[] = {
    &cm_entry_singlediode,
    &cm_entry_singlediodeparams,
    &cm_entry_iec61853par,
    0 };

And I'm getting the following errors:

/Library/Developer/CommandLineTools/usr/bin/c++  -DOBJEXXFCL_ALIGN=64 -pipe -std=c++11 -pedantic -ffor-scope -Wall -Wextra -Wno-unknown-pragmas -Wno-attributes -Wno-delete-non-virtual-dtor -Wno-missing-braces -Wno-vexing-parse -Wno-invalid-source-encoding -Wall -Wno-unknown-pragmas -Wno-deprecated -std=c++11 -g -DOBJEXXFCL_ARRAY_INIT_DEBUG -ggdb -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -dynamiclib -Wl,-headerpad_max_install_names   -o ../../../Products/sscd.dylib -install_name @rpath/sscd.dylib CMakeFiles/ssc.dir/core.cpp.o CMakeFiles/ssc.dir/sscapi.cpp.o CMakeFiles/ssc.dir/vartab.cpp.o ../../../Products/sharedd.a 
Undefined symbols for architecture x86_64:
  "_cm_entry_singlediode", referenced from:
      module_table in sscapi.cpp.o
  "_cm_entry_singlediodeparams", referenced from:
      module_table in sscapi.cpp.o
  "_cm_entry_iec61853par", referenced from:
      module_table in sscapi.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [Products/sscd.dylib] Error 1
make[2]: *** [third_party/ssc/ssc/CMakeFiles/ssc.dir/all] Error 2
make[1]: *** [third_party/ssc/ssc/CMakeFiles/ssc.dir/rule] Error 2
make: *** [ssc] Error 2

with the following in my CMakeLists.txt

if(MSVC)
    add_compile_options(/MP /W4 /w44191 /w44242  /w44266 /w44302 /w44388 /w44826 /w44905 /w44906 /w44928)
    add_compile_definitions( __DLL__ __64BIT__ __WINDOWS__ _CRT_SECURE_NO_WARNINGS __VISUALC__ )
    foreach (flag_var CMAKE_C_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG)
        set(${flag_var} "${${flag_var}} /D_DEBUG" CACHE STRING "compile flags" FORCE)
    endforeach()
else(MSVC)
    if (APPLE)
        add_compile_options(-arch x86_64 -fno-common)
        add_definitions(-D__MACOSX__ -DWX_PRECOMP)
    else ()
        add_definitions(-D__UNIX__)
    endif()
    add_definitions(-D__64BIT__)
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unknown-pragmas -Wno-deprecated -std=c++11" )
    if(CMAKE_BUILD_TYPE STREQUAL "Debug")
        add_compile_definitions(_DEBUG)
    else()
        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3" )
    endif()
endif(MSVC)

Is there a compiler flag I've missed, or is there some other issue?

Aucun commentaire:

Enregistrer un commentaire