llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
29.12k stars 12.01k forks source link

clang 3.8/3.7 does not link with crypto++ ( CryptoPP::DEFAULT_CHANNEL ) #27380

Open llvmbot opened 8 years ago

llvmbot commented 8 years ago
Bugzilla Link 27006
Version 3.8
OS Linux
Reporter LLVM Bugzilla Contributor
CC @hfinkel

Extended Description

The following snippet:

include <cryptopp/hex.h>

int main() { CryptoPP::HexDecoder myHexDecoder; }

does not link with clang++-3.8/clang++3.7 while it links just fine with gcc5.3.1

$ apt-show-versions libcrypto++-dev libcrypto++-dev:amd64/xenial 5.6.1-9 uptodate

The error: $ clang++-3.8 main.cpp -lcrypto++ /tmp/main-1ac893.o: In function CryptoPP::Unflushable<CryptoPP::Filter>::Flush(bool, int, bool)': main.cpp:(.text._ZN8CryptoPP11UnflushableINS_6FilterEE5FlushEbib[_ZN8CryptoPP11UnflushableINS_6FilterEE5FlushEbib]+0xf): undefined reference toCryptoPP::DEFAULT_CHANNEL' clang: error: linker command failed with exit code 1 (use -v to see invocation)

llvmbot commented 8 years ago

I found out that in Ubuntu 16.04 they compiled libcrpyto with thew new ABI:

$ nm /usr/lib/libcryptopp.a | c++filt | grep DEFAULT_CHANNEL U CryptoPP::DEFAULT_CHANNEL[abi:cxx11]

That's why the linker fails to find the symbol