eProsima / Fast-DDS

The most complete DDS - Proven: Plenty of success cases. Looking for commercial support? Contact info@eprosima.com
https://eprosima.com
Apache License 2.0
2.16k stars 765 forks source link

Compile for x86 system used in Android failed #3069

Closed FranzKafkaYu closed 1 year ago

FranzKafkaYu commented 1 year ago

Is there an already existing issue for this?

Expected behavior

compile successfully.

Current behavior

compile foonathan_memory_vendor library succeed. And when I compile fast dds,it failed.

errors:

[  1%] Building CXX object thirdparty/fastcdr/src/cpp/CMakeFiles/fastcdr.dir/Cdr.cpp.o
/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:591:30: warning: implicit conversion increases floating-point precision: 'const long double' to '__float128' [-Wdouble-promotion]
            __float128 tmp = ldouble_t;
                       ~~~   ^~~~~~~~~
/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:640:30: warning: implicit conversion increases floating-point precision: 'const long double' to '__float128' [-Wdouble-promotion]
            __float128 tmp = ldouble_t;
                       ~~~   ^~~~~~~~~
/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:1320:34: warning: implicit conversion increases floating-point precision: 'const long double' to '__float128' [-Wdouble-promotion]
                __float128 tmp = *ldouble_t;
                           ~~~   ^~~~~~~~~~
/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:1344:34: warning: implicit conversion increases floating-point precision: 'const long double' to '__float128' [-Wdouble-promotion]
                __float128 tmp = *ldouble_t;
                           ~~~   ^~~~~~~~~~
/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:1753:30: warning: implicit conversion increases floating-point precision: 'long double' to '__float128' [-Wdouble-promotion]
            __float128 tmp = ldouble_t;
                       ~~~   ^~~~~~~~~
5 warnings generated.
[  1%] Building CXX object thirdparty/fastcdr/src/cpp/CMakeFiles/fastcdr.dir/FastCdr.cpp.o
/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/FastCdr.cpp:331:30: warning: implicit conversion increases floating-point precision: 'const long double' to '__float128' [-Wdouble-promotion]
            __float128 tmp = ldouble_t[idx];
                       ~~~   ^~~~~~~~~~~~~~
1 warning generated.
[  2%] Building CXX object thirdparty/fastcdr/src/cpp/CMakeFiles/fastcdr.dir/FastBuffer.cpp.o
[  2%] Building CXX object thirdparty/fastcdr/src/cpp/CMakeFiles/fastcdr.dir/exceptions/Exception.cpp.o
[  3%] Building CXX object thirdparty/fastcdr/src/cpp/CMakeFiles/fastcdr.dir/exceptions/NotEnoughMemoryException.cpp.o
[  3%] Building CXX object thirdparty/fastcdr/src/cpp/CMakeFiles/fastcdr.dir/exceptions/BadParamException.cpp.o
[  4%] Linking CXX shared library libfastcdr.so
ld: error: undefined symbol: __extenddftf2
>>> referenced by Cdr.cpp:591 (/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:591)
>>>               CMakeFiles/fastcdr.dir/Cdr.cpp.o:(eprosima::fastcdr::Cdr::serialize(long double))
>>> referenced by Cdr.cpp:640 (/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:640)
>>>               CMakeFiles/fastcdr.dir/Cdr.cpp.o:(eprosima::fastcdr::Cdr::serialize(long double))
>>> referenced by Cdr.cpp:1320 (/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:1320)
>>>               CMakeFiles/fastcdr.dir/Cdr.cpp.o:(eprosima::fastcdr::Cdr::serializeArray(long double const*, unsigned int))
>>> referenced 6 more times

ld: error: undefined symbol: __trunctfdf2
>>> referenced by Cdr.cpp:0 (/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:0)
>>>               CMakeFiles/fastcdr.dir/Cdr.cpp.o:(eprosima::fastcdr::Cdr::deserialize(long double&))
>>> referenced by Cdr.cpp:2544 (/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:2544)
>>>               CMakeFiles/fastcdr.dir/Cdr.cpp.o:(eprosima::fastcdr::Cdr::deserializeArray(long double*, unsigned int))
>>> referenced by Cdr.cpp:2554 (/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:2554)
>>>               CMakeFiles/fastcdr.dir/Cdr.cpp.o:(eprosima::fastcdr::Cdr::deserializeArray(long double*, unsigned int))
>>> referenced 9 more times
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

Steps to reproduce

mkdir FastDDS && cd FastDDS
mkdir install

compile foonathan_memory_vendor

git clone https://github.com/eProsima/foonathan_memory_vendor.git
mkdir foonathan_memory_vendor/build 
cd foonathan_memory_vendor/build 
cmake .. -DBUILD_SHARED_LIBS=ON \
              -DCMAKE_TOOLCHAIN_FILE=/opt/FranzKafkaYu/FastDDS/ndk/android-ndk-r25b/build/cmake/android.toolchain.cmake \
              -DCMAKE_SYSTEM_NAME=Android \
              -DANDROID_ABI=x86  \
              -DANDROID_NATIVE_API_LEVEL=24 \
              -DANDROID_NDK=/opt/FranzKafkaYu/FastDDS/ndk/android-ndk-r25b \
              -DCMAKE_INSTALL_PREFIX=/opt/FranzKafkaYu/FastDDS/install

cmake --build . --target install  

it's ok and I can get the libfoonathan_memory-0.7.1.so in FastDDS/install/lib

compile fast-dds

git clone https://github.com/eProsima/Fast-DDS.git
mkdir Fast-DDS/build && cd Fast-DDS/build 
cmake .. -DCMAKE_SYSTEM_NAME=Android \
              -DCMAKE_TOOLCHAIN_FILE=/opt/FranzKafkaYu/FastDDS/ndk/android-ndk-r25b/build/cmake/android.toolchain.cmake 
              -DCMAKE_ANDROID_NDK=/opt/FranzKafkaYu/FastDDS/ndk/android-ndk-r25b \
              -DANDROID_NDK=/opt/FranzKafkaYu/FastDDS/ndk/android-ndk-r25b \
             -DCMAKE_ANDROID_ARCH_ABI=x86 \
             -DANDROID_ABI=x86  \
             -DBUILD_SHARED_LIBS=ON \
             -Dfoonathan_memory_DIR=/opt/FranzKafkaYu/FastDDS/install/lib/foonathan_memory/cmake \
             -DTHIRDPARTY=FORCE \
             -DCMAKE_INSTALL_PREFIX=/opt/FranzKafkaYu/FastDDS/install   

there are no configuration errors but compile failed.

Fast DDS version/commit

Fast DDS commit : f3f994e6f595a26de6448bf413b5796efb38fe7c

commit f3f994e6f595a26de6448bf413b5796efb38fe7c (HEAD -> master, origin/master, origin/HEAD, origin/2.8.x)
Author: Miguel Company <miguelcompany@eprosima.com>
Date:   Fri Nov 4 07:22:04 2022 +0100

    Construct with decltype when inserting to map on FlowControllerFactory (#3034)

    Signed-off-by: Miguel Company <MiguelCompany@eprosima.com>

    Signed-off-by: Miguel Company <MiguelCompany@eprosima.com>

commit f6ef9500d407d7f92437ea53bb440dc98349ce8b
Author: Raul Sanchez-Mateos Lizano <raul@eprosima.com>
Date:   Fri Nov 4 07:19:23 2022 +0100

    Avoid sanitizer warning message if option not set (#3060)

    Signed-off-by: RaulSanchez <raul@eprosima.com>

    Signed-off-by: RaulSanchez <raul@eprosima.com>

commit b043c998ab66dd9c895f06f827acf4f6b6725e20
Author: Raul Sanchez-Mateos Lizano <raul@eprosima.com>
Date:   Thu Nov 3 16:02:44 2022 +0100

    Remove getGuid implementation in StatefulReader mock (#3050)

    Signed-off-by: RaulSanchez <raul@eprosima.com>

    Signed-off-by: RaulSanchez <raul@eprosima.com>

commit 0df66c4f9c26ad9517fde6b9eb76f0a283d9016e
Author: jparisu <69341543+jparisu@users.noreply.github.com>
Date:   Thu Nov 3 12:51:29 2022 +0100

    Fix out of scope variable call in Persistence service (#3018)

    Signed-off-by: jparisu <javierparis@eprosima.com>

    Signed-off-by: jparisu <javierparis@eprosima.com>

commit 7652f50308a40018a5b4a29bfc317acd858025ea
Author: jparisu <69341543+jparisu@users.noreply.github.com>
Date:   Thu Nov 3 12:51:06 2022 +0100

    Fix memory leak in tests (#3017)

    * Fix memory leak in test

    Signed-off-by: jparisu <javierparis@eprosima.com>

    * Fix error in BlackboxTests_RTPS

    Signed-off-by: jparisu <javierparis@eprosima.com>

    Signed-off-by: jparisu <javierparis@eprosima.com>

Platform/Architecture

Ubuntu Focal 20.04 amd64

Transport layer

Default configuration, UDPv4 & SHM

Additional context

XML configuration file

No response

Relevant log output

No response

Network traffic capture

No response

FranzKafkaYu commented 1 year ago

after changing NDK version from r25->r21,this problem disappeared but I got other errors:

 [  1%] Building CXX object thirdparty/fastcdr/src/cpp/CMakeFiles/fastcdr.dir/Cdr.cpp.o
/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:591:30: warning: implicit conversion increases floating-point precision: 'const long double' to '__float128' [-Wdouble-promotion]
            __float128 tmp = ldouble_t;
                       ~~~   ^~~~~~~~~
/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:640:30: warning: implicit conversion increases floating-point precision: 'const long double' to '__float128' [-Wdouble-promotion]
            __float128 tmp = ldouble_t;
                       ~~~   ^~~~~~~~~
/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:1320:34: warning: implicit conversion increases floating-point precision: 'const long double' to '__float128' [-Wdouble-promotion]
                __float128 tmp = *ldouble_t;
                           ~~~   ^~~~~~~~~~
/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:1344:34: warning: implicit conversion increases floating-point precision: 'const long double' to '__float128' [-Wdouble-promotion]
                __float128 tmp = *ldouble_t;
                           ~~~   ^~~~~~~~~~
/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/Cdr.cpp:1753:30: warning: implicit conversion increases floating-point precision: 'long double' to '__float128' [-Wdouble-promotion]
            __float128 tmp = ldouble_t;
                       ~~~   ^~~~~~~~~
5 warnings generated.
[  1%] Building CXX object thirdparty/fastcdr/src/cpp/CMakeFiles/fastcdr.dir/FastCdr.cpp.o
/opt/FranzKafkaYu/FastDDS/Fast-DDS/thirdparty/fastcdr/src/cpp/FastCdr.cpp:331:30: warning: implicit conversion increases floating-point precision: 'const long double' to '__float128' [-Wdouble-promotion]
            __float128 tmp = ldouble_t[idx];
                       ~~~   ^~~~~~~~~~~~~~
1 warning generated.
[  2%] Building CXX object thirdparty/fastcdr/src/cpp/CMakeFiles/fastcdr.dir/FastBuffer.cpp.o
[  2%] Building CXX object thirdparty/fastcdr/src/cpp/CMakeFiles/fastcdr.dir/exceptions/Exception.cpp.o
[  3%] Building CXX object thirdparty/fastcdr/src/cpp/CMakeFiles/fastcdr.dir/exceptions/NotEnoughMemoryException.cpp.o
[  3%] Building CXX object thirdparty/fastcdr/src/cpp/CMakeFiles/fastcdr.dir/exceptions/BadParamException.cpp.o
[  4%] Linking CXX shared library libfastcdr.so
[  4%] Built target fastcdr
[  4%] Building CXX object src/cpp/CMakeFiles/fastrtps.dir/fastdds/topic/DDSSQLFilter/DDSFilterCompoundCondition.cpp.o
[  4%] Building CXX object src/cpp/CMakeFiles/fastrtps.dir/fastdds/topic/DDSSQLFilter/DDSFilterExpression.cpp.o
[  5%] Building CXX object src/cpp/CMakeFiles/fastrtps.dir/fastdds/topic/DDSSQLFilter/DDSFilterExpressionParser.cpp.o
[  5%] Building CXX object src/cpp/CMakeFiles/fastrtps.dir/fastdds/topic/DDSSQLFilter/DDSFilterFactory.cpp.o
[  6%] Building CXX object src/cpp/CMakeFiles/fastrtps.dir/fastdds/topic/DDSSQLFilter/DDSFilterField.cpp.o
[  6%] Building CXX object src/cpp/CMakeFiles/fastrtps.dir/fastdds/topic/DDSSQLFilter/DDSFilterParameter.cpp.o
[  7%] Building CXX object src/cpp/CMakeFiles/fastrtps.dir/fastdds/topic/DDSSQLFilter/DDSFilterPredicate.cpp.o
[  7%] Building CXX object src/cpp/CMakeFiles/fastrtps.dir/fastdds/topic/DDSSQLFilter/DDSFilterValue.cpp.o
[  8%] Building CXX object src/cpp/CMakeFiles/fastrtps.dir/fastdds/log/Log.cpp.o
[  8%] Building CXX object src/cpp/CMakeFiles/fastrtps.dir/fastdds/log/OStreamConsumer.cpp.o
[  8%] Building CXX object src/cpp/CMakeFiles/fastrtps.dir/fastdds/log/StdoutErrConsumer.cpp.o
[  9%] Building CXX object src/cpp/CMakeFiles/fastrtps.dir/fastdds/log/StdoutConsumer.cpp.o
[  9%] Building CXX object src/cpp/CMakeFiles/fastrtps.dir/fastdds/log/FileConsumer.cpp.o
[ 10%] Building CXX object src/cpp/CMakeFiles/fastrtps.dir/rtps/common/Time_t.cpp.o
[ 10%] Building CXX object src/cpp/CMakeFiles/fastrtps.dir/rtps/resources/ResourceEvent.cpp.o
In file included from /opt/FranzKafkaYu/FastDDS/Fast-DDS/src/cpp/rtps/resources/ResourceEvent.cpp:19:
In file included from /opt/FranzKafkaYu/FastDDS/Fast-DDS/include/fastdds/rtps/resources/ResourceEvent.h:25:
/opt/FranzKafkaYu/FastDDS/Fast-DDS/include/fastrtps/utils/TimedMutex.hpp:239:22: error: use of undeclared identifier 'pthread_mutex_timedlock'
        return (0 == pthread_mutex_timedlock(&mutex_, &max_wait));
                     ^
/opt/FranzKafkaYu/FastDDS/Fast-DDS/include/fastrtps/utils/TimedMutex.hpp:310:22: error: use of undeclared identifier 'pthread_mutex_timedlock'
        return (0 == pthread_mutex_timedlock(&mutex_, &max_wait));
                     ^
2 errors generated.
make[2]: *** [src/cpp/CMakeFiles/fastrtps.dir/build.make:272: src/cpp/CMakeFiles/fastrtps.dir/rtps/resources/ResourceEvent.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1000: src/cpp/CMakeFiles/fastrtps.dir/all] Error 2
make: *** [Makefile:166: all] Error 2   
FranzKafkaYu commented 1 year ago

I have downgraded NDK version to 21 and modified the source code,now it can be compiled successfully.I am not sure whether it can work smoothly,anyway this issue shoud be closed now.

zybao commented 11 months ago

how did you solve this problem? I get the same problem

FranzKafkaYu commented 11 months ago

how did you solve this problem? I get the same problem

I modified code according to error info,and now it worked.I didn't record all of this,u need try by yourself.