kubernetes-client / c

Official C client library for Kubernetes

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

How to compile as static .a file?

Jeansen opened this issue · comments

I am not too deep into C, but I would like to consume this API and integrate it as a static library (.a) instead of a shared object (.so). How to achieve this?

Patch the following code to "kubernetes/CMakeLists.txt"

diff --git a/kubernetes/CMakeLists.txt b/kubernetes/CMakeLists.txt
index 592c445..9f65ff8 100644
--- a/kubernetes/CMakeLists.txt
+++ b/kubernetes/CMakeLists.txt
@@ -1302,7 +1302,7 @@ include(PreTarget.cmake OPTIONAL)
 set(PROJECT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")

 # Add library with project file with project name as library name
-add_library(${pkgName} ${SRCS} ${HDRS})
+add_library(${pkgName} STATIC ${SRCS} ${HDRS})
 # Link dependent libraries
 if(NOT CMAKE_VERSION VERSION_LESS 3.4)
     target_link_libraries(${pkgName} PRIVATE OpenSSL::SSL OpenSSL::Crypto)

OK, that worked, I got a libkubernetes.a file now. Unfortunately, when I try to include it in a binary and build that one, I get:

/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64encode: error: undefined reference to 'BIO_f_base64'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64encode: error: undefined reference to 'BIO_new'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64encode: error: undefined reference to 'BIO_s_mem'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64encode: error: undefined reference to 'BIO_new'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64encode: error: undefined reference to 'BIO_push'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64encode: error: undefined reference to 'BIO_set_flags'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64encode: error: undefined reference to 'BIO_write'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64encode: error: undefined reference to 'BIO_ctrl'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64encode: error: undefined reference to 'BIO_ctrl'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64encode: error: undefined reference to 'BIO_ctrl'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64encode: error: undefined reference to 'BIO_free_all'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64encode: error: undefined reference to 'BUF_MEM_grow'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64decode: error: undefined reference to 'BIO_f_base64'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64decode: error: undefined reference to 'BIO_new'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64decode: error: undefined reference to 'BIO_s_mem'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64decode: error: undefined reference to 'BIO_new'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64decode: error: undefined reference to 'BIO_write'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64decode: error: undefined reference to 'BIO_push'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64decode: error: undefined reference to 'BIO_set_flags'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64decode: error: undefined reference to 'BIO_read'
/tmp/included5619073151443731897/libkubernetes.a(binary.c.o):binary.c:function base64decode: error: undefined reference to 'BIO_free_all'

I know, this is some special case because I try to include it in a Kotlin Native build. So far the native build works fine wit the shared object files, but I'd like to not rely on them because they are manually compiled.

So, maybe I am just missing something. If this is something where you could point me to the right directions, I'd appreciate it.

The error message shows that libkubernetes.a cannot obtain the dependency of libssl.
Try including the OpenSSL library (e.g. libssl.a) in your binary.

The Kubernetes project currently lacks enough contributors to adequately respond to all issues.

This bot triages un-triaged issues according to the following rules:

  • After 90d of inactivity, lifecycle/stale is applied
  • After 30d of inactivity since lifecycle/stale was applied, lifecycle/rotten is applied
  • After 30d of inactivity since lifecycle/rotten was applied, the issue is closed

You can:

  • Mark this issue as fresh with /remove-lifecycle stale
  • Close this issue with /close
  • Offer to help out with Issue Triage

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle stale

The Kubernetes project currently lacks enough active contributors to adequately respond to all issues.

This bot triages un-triaged issues according to the following rules:

  • After 90d of inactivity, lifecycle/stale is applied
  • After 30d of inactivity since lifecycle/stale was applied, lifecycle/rotten is applied
  • After 30d of inactivity since lifecycle/rotten was applied, the issue is closed

You can:

  • Mark this issue as fresh with /remove-lifecycle rotten
  • Close this issue with /close
  • Offer to help out with Issue Triage

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle rotten