Yihao Ke created TUBEMQ-380:
-------------------------------
Summary: Cpp client link error when gcc optimization is disabled
Key: TUBEMQ-380
URL: https://issues.apache.org/jira/browse/TUBEMQ-380
Project: Apache TubeMQ
Issue Type: Bug
Components: Client
Affects Versions: tubemq-client-cpp
Reporter: Yihao Ke
Attachments: image-2020-10-22-17-38-01-225.png,
image-2020-10-22-17-41-13-790.png
We encountered tube cpp client link error when we migrate build tools from
CMake to Bazel.
The error message is as below:
client_connection.cc:(.text+0xff0): undefined reference to
`tubemq::ClientConnection::kConnnectMaxTimeMs'
client_service.cc:(.text._ZN6tubemq14ConnectionPoolC2ERSt10shared_ptrINS_12ExecutorPoolEE[_ZN6tubemq14ConnectionPoolC5ERSt10shared_ptrINS_12ExecutorPoolEE]+0xbe):
undefined reference to `tubemq::ConnectionPool::kRegularTimerSecond'
!image-2020-10-22-17-38-01-225.png|width=1119,height=218!
This link error can be reproduced in CMake environment when you remove "-O2" in
CMAKE_CXX_FLAGS
!image-2020-10-22-17-41-13-790.png|width=823,height=213!
According to cpp standard([https://en.cppreference.com/w/cpp/language/static),]
"If a const non-inline (since C++17) static data member or a constexpr static
data member (since C++11)(until C++17) is odr-used, {color:#FF0000}a definition
at namespace scope is still required{color}, but it cannot have an initializer.
A definition may be provided even though redundant (since C++17)."
Possible fix:
# Add static const definition in src/client_connection.cc and
src/client_service.cc
# Or change static const variable to enum
Further consideration:
Turn off compiler optimization in CI to make sure the compiler optimization
will not shadow the compile error or link error
--
This message was sent by Atlassian Jira
(v8.3.4#803005)