C++;如果应用程序使用“创建”,则不会捕获异常-dynamic-lc-ldl-lpthread“; 我有C++应用程序,使用Boost,Asio和OpenSSL。 我尝试在Ubuntu 16.04中构建应用程序,但我被绊住了

C++;如果应用程序使用“创建”,则不会捕获异常-dynamic-lc-ldl-lpthread“; 我有C++应用程序,使用Boost,Asio和OpenSSL。 我尝试在Ubuntu 16.04中构建应用程序,但我被绊住了,c++,linux,exception,gcc,exception-handling,C++,Linux,Exception,Gcc,Exception Handling,所有.cpp文件都已正确编译。编译标志:-m64-O0-Wall-Wextra-MMD-std=c++11 与链接,我有一个问题。链接器的我的命令行: LIBS = -static -L$(BOOST_LIBS) -l:..boostlibs \ -L$(OPENSSL_LIBS) -l:libssl.a -l:libcrypto.a \ -Wl,-Bdynamic -lc -ldl -lpthread \ -Wl,-dynamic-linker=/lib64/ld-li

所有
.cpp
文件都已正确编译。编译标志:
-m64-O0-Wall-Wextra-MMD-std=c++11

与链接,我有一个问题。链接器的我的命令行:

LIBS = -static -L$(BOOST_LIBS) -l:..boostlibs \
    -L$(OPENSSL_LIBS) -l:libssl.a -l:libcrypto.a \
    -Wl,-Bdynamic -lc -ldl -lpthread \
    -Wl,-dynamic-linker=/lib64/ld-linux-x86-64.so.2
g++ *.o $(LIBS) -o executablefile
*.o
表示应用程序所需的所有对象文件的列表)

此命令工作正常,可以启动应用程序。但是在这个应用程序中,blocks
try{}catch(…){}
根本不起作用。如果引发任何异常-我的应用程序终止

try
{
    throw std::exception();
}
catch(...)
{
    std::cerr << "hello from the catch.";
}
我制作了一个简单的应用程序,只使用共享库来构建它。也就是说,我从链接器选项中删除了
-Wl,-b动态
。一切正常,例外情况被捕获。 但我的应用程序需要共享LIB,我不知道该怎么办

如何修复异常捕获

p.S.

需要参数
-Wl,-Bdynamic-lc-ldl-lpthread
,因为如果没有它们,我会从链接器中得到错误:

LIBS = -static -L$(BOOST_LIBS) -l:..boostlibs \
    -L$(OPENSSL_LIBS) -l:libssl.a -l:libcrypto.a \
    -Wl,-Bdynamic -lc -ldl -lpthread \
    -Wl,-dynamic-linker=/lib64/ld-linux-x86-64.so.2
g++ *.o $(LIBS) -o executablefile
/home/../openssl/openssl-1.0.2h-x64-build/lib/libcrypto.a(dso_dlfcn.o): 在函数
dlfcn\u globallookup中:dso\u dlfcn.c:(.text+0x11):警告:
在静态链接的应用程序中使用“dlopen”需要在运行时
用于链接的glibc版本的共享库
/home/../xxx.o:In
功能
boost::asio::detail::resolver\u service::resolve(std::shared\u ptr&, boost::asio::ip::basic\u解析器\u查询常量&, boost::system::error_code&'): xxx.cpp:(.text. boost4asio6detail16冲突解决程序服务共享冲突解决程序3基本冲突解决程序查询系统错误代码[ zn5boost4asio6detail16冲突解决程序服务共享冲突解决程序3基本冲突解决程序查询系统错误代码]+0xd7): 警告:在静态链接的应用程序中使用“getaddrinfo” 在运行时需要使用glibc版本中的共享库 用于链接

这个错误描述得很好,似乎我必须使用共享库

参数
-Wl,-dynamic linker=/lib64/ld-linux-x86-64.so.2
需要,因为
g++
无法找到共享库的路径
ld
。如果我尝试启动编译后的应用程序,我会得到一个错误:
没有这样的文件或目录

p.S.2

我使用Ubuntu 16.04.2和gcc 5.4.0

UPD

我只是想说清楚。 如果我将下面的代码添加到
main
功能的开头,我的应用程序将终止

try
{
    throw std::exception();
}
catch(...)
{
    std::cerr << "hello from the catch.";
}
试试看
{
抛出std::exception();
}
捕获(…)
{

std::cerr您是否记得在每个线程进程退出时/之前捕获异常?是的。所有线程起点都包装在try-catch中。如果我将测试代码添加到我的应用程序中,并且从try-catch内部抛出异常,则app terminated只是为了清除捕获是否在线程进程内?是)异常处理很好。Windows上的相同代码工作正常,您是否尝试过删除
-static
?您是否记得在每个线程进程退出时/之前捕获异常?是。所有线程起点都包在try-catch中。如果我将测试代码添加到我的应用程序中并从我的nside try catch-app terminated只是为了清楚捕获是否在线程进程内?是)异常处理良好。Windows上的相同代码工作正常,您是否尝试过删除
-static