Sure, there's a WITH_STATIC_LIB option on the cmake. Try something like: cmake -DWITH_EXAMPLES=OFF -DBUILD_SHARED_LIBS=OFF -DWITH_STATIC_LIB=ON -DOPENSSL_ROOT_DIR="<your path here>"
-----Original Message----- From: Thomas Käfer [mailto:[email protected]] Sent: Friday, September 22, 2017 1:27 PM To: [email protected] Subject: Re: static cross-compiling I tried to recursively (manually..) follow the errors and install the dev packages and include the libraries with the "-lname" parameter to my gcc line, but this is getting out of hand. It doesn't look like I'll ever reach an end: $ gcc sshtest.c -lssh -lcrypto -lz -lgss -lshishi -ltasn1 -lidn -lgcrypt -o sshtest.x64 -static (output see attached file) there must be some better easier way? I'm more of a java developer and there we have maven or other build systems to pull in requirements for building - can I use cmake or something else to walk those dependency paths for me instead of having to do this manually? 2017-09-21 23:11 GMT+02:00 Jeremy Cross <[email protected]>: > Your output indicates that you are missing symbols during the linking. The > symbol names (like BN_new) are from OpenSSL, which would indicate that you > are not properly including OpenSSL libraries in your linking. Depending on > your configuration there may be other libraries you also need to be linking > in... > > -----Original Message----- > From: Thomas Käfer [mailto:[email protected]] > Sent: Thursday, September 21, 2017 1:25 PM > To: [email protected] > Subject: Re: static cross-compiling > > I'm sorry, I forgot to mention that I did read > http://api.libssh.org/master/libssh_linking.html and tried to put "#define > LIBSSH_STATIC 1" and "#define LIBSSH_STATIC" before my include libssh line > but it didn't seem to make a difference..? > > Ah. okey. I've found this link now: > https://stackoverflow.com/questions/21083052/cross-compiling-for-arm-w > hile-linking-to-libssh-libssh-so-file-not-recognized > > So if that's correct I need to cross-compile libssh and it's dependencies > openssl and zlib for arm first, and can then using those prepared arm lib > binaries compile a static build of my program. I will try to work on that > next. Or have a look "embedded Linux distros like Buildroot, OpenEmbedded or > Embedded Debian Project" to see if I find ready made arm binaries I can use? > > 2017-09-21 19:06 GMT+02:00 Thomas Käfer <[email protected]>: >> Hello! >> >> I would like to write a program that I can cross-compile for Android >> and OpenWRT devices, that uses libssh to first talk to ssh servers >> and in a later development-stage to each other. >> >> Sadly, I'm not really too experienced in programming C / C++, so >> please bear with me. >> >> I found this tutorial >> http://jensd.be/800/linux/cross-compiling-for-arm-with-ubuntu-16-04-l >> t s which with the additional install of the package >> "libc6-armel-cross" >> enabled me to cross-compile a program that prints "hello world" in a >> shell on my android device. >> >> Next step: After installing the package "libssh-dev" I was able to >> use sample code from >> http://api.libssh.org/master/libssh_tutor_guided_tour.html >> to compile a dynamically linked program that works on my Linux laptop. >> >> Now the step I have been struggling with for the last few hours is to >> compile this sample program that uses libssh in a static manner (and >> once that is accomplished doing so using the "arm-linux-gnueabi-gcc" >> cross-compiler) >> >> So I tried: >> $ gcc sshtest.c -static -lssh >> /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libssh.a(misc.c.o): >> In function `ssh_path_expand_tilde': >> (.text+0x87d): warning: Using 'getpwnam' in statically linked >> applications requires at runtime the shared libraries from the glibc >> version used for linking >> /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libssh.a(misc.c.o): >> In function `ssh_get_user_home_dir': >> (.text+0x3a): warning: Using 'getpwuid_r' in statically linked >> applications requires at runtime the shared libraries from the glibc >> version used for linking ... >> /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libssh.a(gssapi.c.o): >> In function `ssh_packet_userauth_gssapi_token_client': >> (.text+0x1b36): undefined reference to `gss_init_sec_context' >> /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libssh.a(gssapi.c.o): >> In function `ssh_packet_userauth_gssapi_token_client': >> (.text+0x1c20): undefined reference to `gss_get_mic' >> collect2: error: ld returned 1 exit status >> >> Then I downloaded the libssh source package and made a static build >> of the library using the ccmake gui to set the static parameter to true. >> With this I tried: >> $ gcc sshtest.c libssh-0.7.5/build/src/libssh.a -lssh >> libssh-0.7.5/build/src/libssh.a(curve25519.c.o): In function >> `ssh_curve25519_build_k': >> curve25519.c:(.text+0x13a): undefined reference to `BN_new' >> curve25519.c:(.text+0x1e9): undefined reference to `BN_bin2bn' >> libssh-0.7.5/build/src/libssh.a(dh.c.o): In function `ssh_get_random': >> ... >> libssh-0.7.5/build/src/libssh.a(bignum.c.o): In function `ssh_print_bignum': >> bignum.c:(.text+0x175): undefined reference to `BN_bn2hex' >> bignum.c:(.text+0x1dc): undefined reference to `CRYPTO_free' >> collect2: error: ld returned 1 exit status >> >> >> Now I'm out of ideas or in other words my googling skills are not >> sufficient to find new ones ;) Please help.. >> Kind regards, >> Thomas K. >
