solaris 10 gcc 4.8.2上的-lpthread和-phreads之间有什么区别
What is the difference between -lpthread and -pthreads on solaris 10 gcc 4.8.2
我的应用程序在solaris-sparc中运行,并使用g++4.8.2构建,版本详细信息为:
solaris : SunOS t1000 5.10 Generic_141444-09 sun4v sparc SUNW,Sun-Fire-T1000
g++ : gcc version 4.8.2 (GCC)
第一次,我使用boost::线程并使用以下内容构建应用程序:
g++-phreads-locket-lnsl-o dist/Debug/GNU Solaris Sparc/accagent build/Debug/GNU Solaris Sparc/PassengerFlowThread.o build/Debug/NU Solaris Sparc/AccDataTaker.o build/Debug/GU Solaris Sparc/AccCache.o build/Debug/NU SolarisSparc/DeviceStatusThread.o uild/Debug/NUU Solaris Sparc/EntityAccessFactory.obuild/Debug/GNU Solaris Sparc/BasicSmith.o build/Debug/GU Solaris Sparc/CBThread.o build/Debug/NU Solaris Sparc/SegmentedDeviceStatus.o build/Debug/NU SolarisSparc/AccInfo.pb.o build/DeDebug/NU Solaris Sparc/CBException.o build/Debug/NU Solaris Sparc/TimerThread.o uild/Debug/Nu Solaris Sparc/STEModbusRequest.o build/Debug/NU Solaris Sparc/SegmentedPassengerFlow.obuild/Debug/GNU Solaris Sparc/ModbusConfigMap.o build/Debug/GU Solaris Sparc/DeviceStatusSmith.o build/Debug/GNUSolaris Sparc/StationModeThread.o build/Debug/GU Solaris Sparc/AccMain.o build/Debug/GU Solaris Sparc/ModbusTcpServer.o build/Debug/GN Solaris Sparc/PassengerFlowSmith.o build/dibug/GU SolarisSparc/CacheKeeper.o build/Debug/GN Solaris Sparc/SegmentedStationMode.obuild/Debug/GNU Solaris Sparc/AccInfoImpl.o build/Debug/GU Solaris Sparc/AsioClient.o build/Debug/NU Solaris Sparc/AccDataSenderThread.o build/Debug/NU SolarisSparc/ModbusRequest.o build/Debug/NU Solaris Sparc/AccdDataSender.o build/Debug/GNU SolarisSparc/StationModeSmith.o build/Debug/GU Solarissparc/AccDataSenderTcpServer.o build/Debug/GU Solaris Sparc/ModbusException.obuild/Debug/GNU Solaris Sparc/CacheImpl.o build/Debug/NU Solaris Sparc/EventManagerThread.o build/Debug/GU Solaris Sparc/CacheKeeperThread.o uild/Debug/GN Solaris Sparc/log.o build/Debug/NU SolarisSparc/AccAgent.o-L./..//cots/poco_1_4_6/lib/SunOS/sun4v-L./..//cots/protobuf_2_4_1/src/.libs-L../..//cots/boost_1_55_0/stage/lib-L./..//tools/lib-L./..//cots/oracle/1120/solaris10_sparc/lib-L./..//sdk-L./..//cots/RCF_2_0_2670/库-lposix4-lbost_program_options-lbostrongystem-lbost_files系统-lbost_thread-lclntsh-lprotobuf-lRCF库-lPocoNetd-lPocoUtild-lPocoFoundationd
当应用程序运行时,boost::线程通常无法创建。
第二次,我使用posix线程并使用以下内容构建应用程序:
g++-phreads-locket-lnsl-o dist/Debug/GNU Solaris Sparc/accagent build/Debug/GNU Solaris Sparc/PassengerFlowThread.o build/Debug/NU Solaris Sparc/AccDataTaker.o build/Debug/GU Solaris Sparc/AccCache.o build/Debug/NU SolarisSparc/DeviceStatusThread.o uild/Debug/NUU Solaris Sparc/EntityAccessFactory.obuild/Debug/GNU Solaris Sparc/BasicSmith.o build/Debug/GU Solaris Sparc/CBThread.o build/Debug/NU Solaris Sparc/SegmentedDeviceStatus.o build/Debug/NU SolarisSparc/AccInfo.pb.o build/DeDebug/NU Solaris Sparc/CBException.o build/Debug/NU Solaris Sparc/TimerThread.o uild/Debug/Nu Solaris Sparc/STEModbusRequest.o build/Debug/NU Solaris Sparc/SegmentedPassengerFlow.obuild/Debug/GNU Solaris Sparc/ModbusConfigMap.o build/Debug/GU Solaris Sparc/DeviceStatusSmith.o build/Debug/GNUSolaris Sparc/StationModeThread.o build/Debug/GU Solaris Sparc/AccMain.o build/Debug/GU Solaris Sparc/ModbusTcpServer.o build/Debug/GN Solaris Sparc/PassengerFlowSmith.o build/dibug/GU SolarisSparc/CacheKeeper.o build/Debug/GN Solaris Sparc/SegmentedStationMode.obuild/Debug/GNU Solaris Sparc/AccInfoImpl.o build/Debug/GU Solaris Sparc/AsioClient.o build/Debug/NU Solaris Sparc/AccDataSenderThread.o build/Debug/NU SolarisSparc/ModbusRequest.o build/Debug/NU Solaris Sparc/AccdDataSender.o build/Debug/GNU SolarisSparc/StationModeSmith.o build/Debug/GU Solarissparc/AccDataSenderTcpServer.o build/Debug/GU Solaris Sparc/ModbusException.obuild/Debug/GNU Solaris Sparc/CacheImpl.o build/Debug/NU Solaris Sparc/EventManagerThread.o build/Debug/GU Solaris Sparc/CacheKeeperThread.o uild/Debug/GN Solaris Sparc/log.o build/Debug/NU SolarisSparc/AccAgent.o-L./..//cots/poco_1_4_6/lib/SunOS/sun4v-L./..//cots/protobuf_2_4_1/src/.libs-L../..//cots/boost_1_55_0/stage/lib-L./..//tools/lib-L./..//cots/oracle/1120/solaris10_sparc/lib-L./..//sdk-L./..//cots/RCF_2_0_2670/库-lposix4-lbost_program_options-lbostrongystem-lbost_files系统-lbost_thread-lclntsh-lprotobuf-lRCF库-lPocoNetd-lPocoUtild-lPocoFoundationd
应用程序有时会转储以下信息:
程序终止,信号为11,分段故障。
【新流程735251】
【新工艺800787】
[新流程866323]
[新工艺931859]
【新工艺997395】
【新工艺79891】
【新工艺407571】
【新流程538643】
[新工艺604179]
【新流程669715】
来自/usr/lib/ld.so.1 的elf_find_sym()中的0 0xfdbbe7fc
第三次,我也使用posix线程,并使用以下代码构建(add-lpthread):
g++-lpthread-phreads-lsocket-lnsl-o dist/Debug/GNU Solaris Sparc/accagent build/Debug/NUU Solaris Sparc/PassengerFlowThread.o build/Debug/NUU SolarisSparc/AccDataTaker.o build/Debbug/NUU索拉里斯Sparc/AccAcher.o build/Degug/NGNU Solarissparc/Acc.o build/DDebug/NUU Solaris Sparc/DeviceStatusThread.obuild/Debug/GNU Solaris Sparc/BasicSmith.o build/Debug/GU Solaris Sparc/CBThread.o build/Debug/NU Solaris Sparc/SegmentedDeviceStatus.o build/Debug/NU SolarisSparc/AccInfo.pb.o build/DeDebug/NU Solaris Sparc/CBException.o build/Debug/NU Solaris Sparc/TimerThread.o uild/Debug/Nu Solaris Sparc/STEModbusRequest.o build/Debug/NU Solaris Sparc/SegmentedPassengerFlow.obuild/Debug/GNU Solaris Sparc/ModbusConfigMap.o build/Debug/GU Solaris Sparc/DeviceStatusSmith.o build/Debug/GNUSolaris Sparc/StationModeThread.o build/Debug/GU Solaris Sparc/AccMain.o build/Debug/GU Solaris Sparc/ModbusTcpServer.o build/Debug/GN Solaris Sparc/PassengerFlowSmith.o build/dibug/GU SolarisSparc/CacheKeeper.o build/Debug/GN Solaris Sparc/SegmentedStationMode.obuild/Debug/GNU Solaris Sparc/AccInfoImpl.o build/Debug/GU Solaris Sparc/AsioClient.o build/Debug/NU Solaris Sparc/AccDataSenderThread.o build/Debug/NU SolarisSparc/ModbusRequest.o build/Debug/NU Solaris Sparc/AccdDataSender.o build/Debug/GNU SolarisSparc/StationModeSmith.o build/Debug/GU Solarissparc/AccDataSenderTcpServer.o build/Debug/GU Solaris Sparc/ModbusException.obuild/Debug/GNU Solaris Sparc/CacheImpl.o build/Debug/NU Solaris Sparc/EventManagerThread.o build/Debug/GU Solaris Sparc/CacheKeeperThread.o uild/Debug/GN Solaris Sparc/log.o build/Debug/NU SolarisSparc/AccAgent.o-L./..//cots/poco_1_4_6/lib/SunOS/sun4v-L./..//cots/protobuf_2_4_1/src/.libs-L../..//cots/boost_1_55_0/stage/lib-L./..//tools/lib-L./..//cots/oracle/1120/solaris10_sparc/lib-L./..//sdk-L./..//cots/RCF_2_0_2670/库-lposix4-lbost_program_options-lbostrongystem-lbost_files系统-lbost_thread-lclntsh-lprotobuf-lRCF库-lPocoNetd-lPocoUtild-lPocoFoundationd
现在该应用程序运行了大约一天,没有崩溃和任何其他异常。
我的问题是:
1) -lpthread和-phreads之间有什么区别?
2) 是"/usr/lib/ld.so.1";影响我的应用程序?
3) 我用-lpthread和-phreads解决了链接的问题吗?
顺便说一句,如果没有-ppthreads,我的应用程序就无法通过构建。
通常,当您在链接过程中使用-l选项时,它会告诉将程序与命名库链接,因此-lpthread指示与pthread库链接,库的文件名为libpthread.a、libpthread.so或类似。
include文件包含Oracle Solaris线程函数的声明。include文件包含Pthreads函数的声明。
链接器标志-lpthread指示在pthread API(libpthread库)中进行链接,-mt选项链接在libthread库中。使用Pthreads时需要这两个标志,因为libpthread提供了一个到libthread的接口。
最后我发现转储是我的协议缓冲区链接问题。在我的协议缓冲区的.libs目录中找不到libprotoc.so.7.0的软链接(libprotoc.so),所以它是自动链接libprotoc.a的。我创建了一个动态链接,作为libprotoc.so指向libprotoc.so.7.0。问题得到了解决。
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 构造函数和转换运算符之间的重载解析
- solaris 10 gcc 4.8.2上的-lpthread和-phreads之间有什么区别