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)

Reply via email to