it's not the lib, it's the header interface to the lib. On Fri, Jun 5, 2015 at 7:42 PM, Sunrise <helios.cor...@gmail.com> wrote:
> Thanks for your reply. I am aware of extern "C" {} but this is not an > option for me. As I mentioned, there are a lot of lib files (which were not > written by me) and I was wondering if lib itself could be untouched. > > > On 06/05/2015 07:33 PM, J Decker wrote: > > c++ does name mangling on functions... so functions like 'f' become a much > more complex name (as shown in the xxx not found in your error messages). > In order for C++ to not produce a mangled name C functions have to be > defined as > > extern "c" void f( void ); > but 'extern "c"' is not liked by C... so you really need to define in the > shared header something like... > > #ifdef __cplusplus > #define CEXTERN extern "C" > #ese > #define CEXTERN > #endif > > CEXTERN void f( void ); > > But of course since you don't know about name mangling I guess you don't > know proper header usage either. This is not a cmake issue, but a general > C++ issue... and you'd do better asking stack exchange or something. > > On Fri, Jun 5, 2015 at 6:37 PM, Sunrise <helios.cor...@gmail.com> wrote: > >> Hello, >> >> I am linking my code to a library. My code is in C++ but the library is >> in C. >> >> The problem is that whenever the extension of library implementations are >> "c" (not cpp), they are not linked and I get "undefined reference to" >> error. >> >> Here is an example: >> >> Suppose I have >> ./src/main.cpp // as main file >> ./include/lib.h >> ./include/lib.c // as a library >> >> And the cmake file is >> >> cmake_minimum_required(VERSION 2.8) >> project(myproj) >> >> set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include) >> include_directories(${INCLUDE_DIR}) >> add_library(MY_LIB ${INCLUDE_DIR}/Lib.c) >> >> set(EXECUTABLE_NAME "myproj") >> set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) >> add_executable(myproj ${SOURCE_DIR}/main.cpp) >> >> target_link_libraries(myproj MY_LIB) >> >> This returns undefined reference to error, but if I rename lib.c to >> lib.cpp, everything works fine. >> >> How can I resolve this? I do not want to rename the file to cpp, because >> there are a lot of library files and I prefer to keep the library >> implementations untouched. >> >> Thanks. >> >> -- >> >> Powered by www.kitware.com >> >> Please keep messages on-topic and check the CMake FAQ at: >> http://www.cmake.org/Wiki/CMake_FAQ >> >> Kitware offers various services to support the CMake community. For more >> information on each offering, please visit: >> >> CMake Support: http://cmake.org/cmake/help/support.html >> CMake Consulting: http://cmake.org/cmake/help/consulting.html >> CMake Training Courses: http://cmake.org/cmake/help/training.html >> >> Visit other Kitware open-source projects at >> http://www.kitware.com/opensource/opensource.html >> >> Follow this link to subscribe/unsubscribe: >> http://public.kitware.com/mailman/listinfo/cmake >> > > >
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake