Hi,
I'm trying to install RTI DDS on SCONE (SGX enabled confidential computing container) based image. The image is Ubuntu 20.04 and I download the rti_connext_dds-6.1.1-lm-x64Linux4gcc7.3.0.run installer. It shows the following errors when I compile the examples in rti_workspace:
/opt/scone/cross-compiler/bin/../lib/gcc/x86_64-linux-musl/10.2.0/../../../../x86_64-linux-musl/bin/ld: /opt/rti_connext_dds-6.1.1/lib/x64Linux4gcc7.3.0/libnddscorez.a(DurableSubscription.c.o): in function `WriterHistoryDurableSubscriptionManager_restoreDurSubState':
DurableSubscription.c:(.text+0x1ec8): undefined reference to `__strcpy_chk'
/opt/scone/cross-compiler/bin/../lib/gcc/x86_64-linux-musl/10.2.0/../../../../x86_64-linux-musl/bin/ld: /opt/rti_connext_dds-6.1.1/lib/x64Linux4gcc7.3.0/libnddscorez.a(DurableSubscription.c.o):DurableSubscription.c:(.text+0x23f3): more undefined references to `__strcpy_chk' follow
/opt/scone/cross-compiler/bin/../lib/gcc/x86_64-linux-musl/10.2.0/../../../../x86_64-linux-musl/bin/ld: /opt/rti_connext_dds-6.1.1/lib/x64Linux4gcc7.3.0/libnddscorez.a(bcompress.c.o): in function `BZ2_compressBlock':
bcompress.c:(.text+0x585): undefined reference to `__fprintf_chk'
/opt/scone/cross-compiler/bin/../lib/gcc/x86_64-linux-musl/10.2.0/../../../../x86_64-linux-musl/bin/ld: bcompress.c:(.text+0x742): undefined reference to `__fprintf_chk'
/opt/scone/cross-compiler/bin/../lib/gcc/x86_64-linux-musl/10.2.0/../../../../x86_64-linux-musl/bin/ld: /opt/rti_connext_dds-6.1.1//lib/x64Linux4gcc7.3.0/libnddscorez.a(DurableSubscription.c.o): in function `WriterHistoryDurableSubscriptionManager_findDurSub':
DurableSubscription.c:(.text+0x16f): undefined reference to `__strcpy_chk'
/opt/scone/cross-compiler/bin/../lib/gcc/x86_64-linux-musl/10.2.0/../../../../x86_64-linux-musl/bin/ld: bcompress.c:(.text+0x742): undefined reference to `__fprintf_chk'
As I only start to learn and use RTI DDS recently, could anyone help to figure out what caused the problem or any hints to inspect and solve it?
Thanks in advance.
Are you using a cross compiler? What is the compile or link line that is being executed? Do you have all the required libraries included?
What version of the compiler are you using? What is the version of glibc?
Try with a version of the compiler closer to gcc 7.3.0
Hi,
Yes, I'm using the cross compiler docker image provided by SCONE platform. The com
I have to link with musl not glic limited by the SCONE image, is it gonna cause problems for using RTI DDS?
When I change the COMPILER to scone-g++ in the makefile, it shows the errors below:
/opt/scone/cross-compiler/bin/../lib/gcc/x86_64-linux-musl/10.2.0/../../../../x86_64-linux-musl/bin/ld: cannot find -lnddscppz
/opt/scone/cross-compiler/bin/../lib/gcc/x86_64-linux-musl/10.2.0/../../../../x86_64-linux-musl/bin/ld: cannot find -lnddscz
/opt/scone/cross-compiler/bin/../lib/gcc/x86_64-linux-musl/10.2.0/../../../../x86_64-linux-musl/bin/ld: cannot find -lnddscorez
Thanks.
Well, not finding the libraries is probably due to some problem in your makefile. I assume that you have it setup to pass the path to libraries to the compiler/linker. You should check the arguments passed to the linker to make sure that it is what you need it to be.
As for well it work, it may not. strcpy_chk, fprintf_chk, etc., are functions that should be provided by the system libraries to which Connext DDS is linked. If your development environment is compatible with gcc 7.3.0, then problems like missing symbols can occur.
You can contact an RTI account team to further investigate. It's possible for RTI to build a version of our software that supports your development toolset/platform. If you can let me know where you're located, I can ask the team responsible for your area get in touch. My email is howard@rti.com.
Hi,
I'm not too sure if I inclueded all required libraries. I just followed the instructions on RTI DDS websites and documents.
I'm in Ireland. Actually, Martin Brignall, the local Field Application Engineer based in the UK, has contacted me to schedule a meeting to discuss.
Thanks again for you replies and help.
By using "rtiddsgen -example <platform>", it will create a sample makefile for your platform (cpu + OS + compiler) combination that you can use as a starting point or reference for your own makefile.
But working with Martin will be the best way to proceed. Good luck!