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 <[email protected]
<mailto:[email protected]>> 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 <http://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