Skip to content

Build shared lib with CMake #289

@inkydragon

Description

@inkydragon
  • build shared lib
  • build both static and shared lib
  • add CI
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4da8046..7a4ee75 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,7 +4,7 @@ project(openlibm
         VERSION 0.8.0
         LANGUAGES C ASM)
 
-add_library("${PROJECT_NAME}" STATIC)
+add_library("${PROJECT_NAME}" SHARED)

It compiles fine, but there are errors when linking.

cmake build log
[100%] Linking C shared library libopenlibm.so
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_remainder.S.o: in function `remainder':
(.text+0x0): multiple definition of `remainder'; CMakeFiles/openlibm.dir/src/e_remainder.c.o:e_remainder.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_remainderf.S.o: in function `remainderf':
(.text+0x0): multiple definition of `remainderf'; CMakeFiles/openlibm.dir/src/e_remainderf.c.o:e_remainderf.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_remainderl.S.o: in function `remainderl':
(.text+0x0): multiple definition of `remainderl'; CMakeFiles/openlibm.dir/src/e_remainderl.c.o:e_remainderl.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_sqrt.S.o: in function `sqrt':
(.text+0x0): multiple definition of `sqrt'; CMakeFiles/openlibm.dir/src/e_sqrt.c.o:e_sqrt.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_sqrtf.S.o: in function `sqrtf':
(.text+0x0): multiple definition of `sqrtf'; CMakeFiles/openlibm.dir/src/e_sqrtf.c.o:e_sqrtf.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_sqrtl.S.o: in function `sqrtl':
(.text+0x0): multiple definition of `sqrtl'; CMakeFiles/openlibm.dir/src/e_sqrtl.c.o:e_sqrtl.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_llrint.S.o: in function `llrint':
(.text+0x0): multiple definition of `llrint'; CMakeFiles/openlibm.dir/src/s_llrint.c.o:s_llrint.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_llrintf.S.o: in function `llrintf':
(.text+0x0): multiple definition of `llrintf'; CMakeFiles/openlibm.dir/src/s_llrintf.c.o:s_llrintf.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_llrintl.S.o: in function `llrintl':
(.text+0x0): multiple definition of `llrintl'; CMakeFiles/openlibm.dir/src/s_llrintl.c.o:s_llrintl.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_logbl.S.o: in function `logbl':
(.text+0x0): multiple definition of `logbl'; CMakeFiles/openlibm.dir/src/s_logbl.c.o:s_logbl.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_lrint.S.o: in function `lrint':
(.text+0x0): multiple definition of `lrint'; CMakeFiles/openlibm.dir/src/s_lrint.c.o:s_lrint.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_lrintf.S.o: in function `lrintf':
(.text+0x0): multiple definition of `lrintf'; CMakeFiles/openlibm.dir/src/s_lrintf.c.o:s_lrintf.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_lrintl.S.o: in function `lrintl':
(.text+0x0): multiple definition of `lrintl'; CMakeFiles/openlibm.dir/src/s_lrintl.c.o:s_lrintl.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_remquo.S.o: in function `remquo':
(.text+0x0): multiple definition of `remquo'; CMakeFiles/openlibm.dir/src/s_remquo.c.o:s_remquo.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_remquof.S.o: in function `remquof':
(.text+0x0): multiple definition of `remquof'; CMakeFiles/openlibm.dir/src/s_remquof.c.o:s_remquof.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_remquol.S.o: in function `remquol':
(.text+0x0): multiple definition of `remquol'; CMakeFiles/openlibm.dir/src/s_remquol.c.o:s_remquol.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_rintl.S.o: in function `rintl':
(.text+0x0): multiple definition of `rintl'; CMakeFiles/openlibm.dir/src/s_rintl.c.o:s_rintl.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_scalbn.S.o: in function `scalbn':
(.text+0x0): multiple definition of `scalbn'; CMakeFiles/openlibm.dir/src/s_scalbn.c.o:s_scalbn.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_scalbn.S.o: in function `scalbn':
(.text+0x0): multiple definition of `ldexp'; CMakeFiles/openlibm.dir/src/s_scalbn.c.o:s_scalbn.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_scalbnf.S.o: in function `scalbnf':
(.text+0x0): multiple definition of `scalbnf'; CMakeFiles/openlibm.dir/src/s_scalbnf.c.o:s_scalbnf.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_scalbnf.S.o: in function `scalbnf':
(.text+0x0): multiple definition of `ldexpf'; CMakeFiles/openlibm.dir/src/s_scalbnf.c.o:s_scalbnf.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_scalbnl.S.o: in function `scalbnl':
(.text+0x0): multiple definition of `scalbnl'; CMakeFiles/openlibm.dir/src/s_scalbnl.c.o:s_scalbnl.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_scalbnl.S.o: in function `scalbnl':
(.text+0x0): multiple definition of `ldexpl'; CMakeFiles/openlibm.dir/src/s_scalbnl.c.o:s_scalbnl.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_fmod.S.o: in function `fmod':
(.text+0x0): multiple definition of `fmod'; CMakeFiles/openlibm.dir/src/e_fmod.c.o:e_fmod.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_fmodf.S.o: in function `fmodf':
(.text+0x0): multiple definition of `fmodf'; CMakeFiles/openlibm.dir/src/e_fmodf.c.o:e_fmodf.c:(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_fmodl.S.o: in function `fmodl':
(.text+0x0): multiple definition of `fmodl'; CMakeFiles/openlibm.dir/src/e_fmodl.c.o:e_fmodl.c:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
gmake[2]: *** [CMakeFiles/openlibm.dir/build.make:4522: libopenlibm.so] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/openlibm.dir/all] Error 2
gmake: *** [Makefile:91: all] Error 2

Maybe we don't need the generic C implementation in src/ when there is a native assembly implementation for the corresponding architecture.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions