我正在使用oneAPI(英特尔的编译器),在编译时使用-ipo
标志时遇到了问题。设置:
my_lib
项目:静态库my_test
:链接到my_lib
的可执行文件
文件:my_lib
:
main.cpp
int foo() {
return 0;
}
CMakeLists
project(my_lib CXX)
add_library(my_lib STATIC main.cpp)
my_test
:
main.cpp
#include <iostream>
using namespace std;
int main() {
cout << "Hello World" << endl;
}
- CMakeLists
project(my_test)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ipo")
add_subdirectory(my_lib)
add_executable(my_test main.cpp)
target_link_libraries(my_test my_lib)
文件夹结构如下所示:
- main.cpp
- CMakeLists. txt//这是
my_test
的 - 我的库(_L)
- main.cpp
- CMakeLists.txt
我会在my_test
的CMakeLists.txt上运行cmake
,然后运行make
。我得到的错误是:
...
...
[100%] Linking CXX executable my_test
/usr/bin/ld: my_lib/my_lib.a: error adding symbols: archive has no index; run ranlib to add one
icpx: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [CMakeFiles/my_test.dir/build.make:98: my_test] Error 1
make[1]: *** [CMakeFiles/Makefile2:100: CMakeFiles/my_test.dir/all] Error 2
你知道为什么我不能把这个简单的代码链接起来吗?
2条答案
按热度按时间s8vozzvw1#
看起来你在英特尔社区筹集了一个thread。
在CMakeLists.txt中进行以下更改后,您可以尝试使用CMake进行构建。此命令可用于通过icpx编译器启用IPO。
请参阅下面的链接了解更多信息。
https://gitlab.kitware.com/cmake/cmake/-/issues/20818
wn9m85ua2#
我在某个地方读到,默认的GNU链接器无法理解使用Intel编译器构建的带有
-ipo
标志的二进制文件。我切换到使用LLVM链接器,它工作了。为了打开它,我将以下内容添加到CMakeLists文件中