升级到Ubuntu 14.04是否打破了c ++链接器?

Mos*_*bin 0 c++ ubuntu boost cmake

我有一个基于Linux的应用程序,在Ubuntu 12.04 LTS下运行,编译,链接和运行没有问题.

我最近将我的Ubuntu升级到14.04 LTS,并且遇到了编译和链接应用程序的问题.

通过在两个文件中手动修改Boost 1.48的本地副本来解决编译问题(包括/ boost/config/stdlib/libstdcpp3.h pp和include/boost/thread/xtime.hpp).此时应用程序编译成功.

我遇到的问题是链接失败并显示错误消息:

c++: error: unrecognized command line option ‘-Wl’
Run Code Online (Sandbox Code Playgroud)

我使用CMake在多个平台上编译应用程序.这是CMake生成的链接描述文件.请注意,/ usr/bin/c ++现在无法识别"-Wl"选项:

/usr/bin/c++ 
-fno-stack-protector 
-g 
-Wl 
CMakeFiles/Project.dir/main.cpp.o 
CMakeFiles/Project.dir/TestCallback.cpp.o 
CMakeFiles/Project.dir/utils.cpp.o 
CMakeFiles/Project.dir/Request1.cpp.o 
CMakeFiles/Project.dir/Response1.cpp.o 
CMakeFiles/Project.dir/TextChatRequest.cpp.o 
CMakeFiles/Project.dir/TextChatResponse.cpp.o 
-o 
/home/user/private/Project/Project_Release_1_2_Codename/Build/bin/Debug/Project 
-L/home/user/Libraries/Ubuntu32_12.04/boost_1.48/lib 
-L/home/user/Libraries/Ubuntu32_12.04/SqlLite_3.6/lib 
-L/home/user/Libraries/Ubuntu32_12.04/taglib_1.7/lib 
-L/home/user/Libraries/Ubuntu32_12.04/JSON_1.0/lib/Debug 
-L/home/user/private/Project/Project_Release_1_2_Codename/Build/../lib/libUbuntu32/Debug 
-rdynamic 
/home/user/private/Project/Project_Release_1_2_Codename/lib/libUbuntu32/Debug/libAPI.a 
/home/user/private/Project/Project_Release_1_2_Codename/lib/libUbuntu32/Debug/libInternals.a 
-lboost_thread 
-lboost_system 
-lboost_filesystem 
-lboost_program_options 
-ltaglib 
-lJSON 
-lpthread 
-Wl,-Bstatic 
-lsqlite3 
-Wl,-Bdynamic 
-ldl 
-Wl,-rpath,/home/user/Libraries/Ubuntu32_12.04/boost_1.48/lib:/home/user/Libraries/Ubuntu32_12.04/SqlLite_3.6/lib:/home/user/Libraries/Ubuntu32_12.04/taglib_1.7/lib:/home/user/Libraries/Ubuntu32_12.04/JSON_1.0/lib/Debug:/home/user/private/Project/Project_Release_1_2_Codename/Build/../lib/libUbuntu32/Debug 
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的软件的版本信息:

Ubuntu:
    14.04.1 LTS (trusty)

c++ compiler/linker:
    (Ubuntu 4.8.2-19ubuntu1) 4.8.2

CMake:
    Version 2.8.12.2
Run Code Online (Sandbox Code Playgroud)

为什么链接器不能识别"-Wl"命令?我升级到14.04 LTS是否修改了链接器软件库?如何备份和链接我的应用程序?

use*_*267 5

在命令的第4行,您-Wl没有任何实际的链接器选项.

https://gcc.gnu.org/gcc-4.7/porting_to.html

在此页面顶部右侧是以下内容:

早期版本没有对gcc/g ++/gfortran等命令行中完全无效的选项发出警告或错误,如果没有编译,但只执行了链接.这已不再是这种情况.例如,

gcc -Wl -o foo foo.o -mflat_namespace

现在产生以下错误

错误:无法识别的命令行选项'-Wl'

错误:无法识别的命令行选项'-mflat_namespace'

无效选项需要从命令行中删除或替换为有效的选项.

12.04 LTS打包GCC 4.6,你现在已经跳到4.8并且-Wl它本身不再是一个有效的选项(或者说它从来没有,GCC现在更加迂腐).

  • @MosheRubin如上,`​​-Wl`不是有效的连接命令,它必须跟一个逗号和一个或多个接头的选择.您不需要明确地将对象传递给链接器,GCC会自动执行此操作. (2认同)