这对我来说似乎很明显,但我找不到任何解决方案。假设我想添加或更改适用于所有 yocto 配方的编译器标志/选项。可以在某处添加全局标志而不更改配方?
我想在集群上创建一个包含一些 python 包的虚拟环境,其中有不同的英特尔处理器可用(例如 sandy bridge old和 haswell new)。必须从其中进行安装的登录节点是 haswell。
所以我:
pip install virtualenv
cd my_project_folder
virtualenv my_project
Run Code Online (Sandbox Code Playgroud)
如果我这样做,当我登录到沙桥并运行 python 时,我得到:
请确认操作系统和处理器均支持 Intel(R) MOVBE、F16C、FMA、BMI、LZCNT 和 AVX2 指令。
因为 python 可执行文件是使用仅适用于 haswell 节点的编译器标志创建的。我可以告诉 virtualenv 我想使用的 python 可执行文件:
virtualenv -p /usr/bin/python2.7 my_project
Run Code Online (Sandbox Code Playgroud)
但是当我
pip install numpy
Run Code Online (Sandbox Code Playgroud)
他找到并采用了它的haswell编译版本,它不会再次在沙桥拱上运行。
如何指示 pip 不使用使用 haswell 标志编译的包?
出于某些原因,我可以解释我无法使用沙桥处理器创建 virtenv。
当gcc使用optimizations-on 运行时,它会在认为函数处于热路径或传播到函数参数的常量时克隆(复制)C函数.
更具体地说,这似乎是由fipa-cp-clone选项控制的.
有没有办法影响这个?比如使用某个属性标记一个参数,作为编译时常量(就像你可以在带有模板参数的C++中那样),这将导致函数被克隆?
我需要查看为某些C函数生成的汇编代码,编译C代码时应该使用哪些标志?
编辑:使用G ++编译器,抱歉!
在我的系统上,当我编译一些东西(bfin-linux-uclibc-g++但是这是无关紧要的)时,我得到了数百个关于其中一个编译器标志的警告(不在我自己的代码库中).我想禁用它.
fde encoding in src/SpiMessageUtil.o(.eh_frame) prevents .eh_frame_hdr table being created.
Run Code Online (Sandbox Code Playgroud)
这是从默认的gcc标志开始的,它被移交给链接器,通过添加'-v'到编译步骤很容易检查:
COLLECT_GCC_OPTIONS=... --eh-frame-hdr ...
Run Code Online (Sandbox Code Playgroud)
我想摆脱这个选项,这确实是默认定义的:
bfin-linux-uclibc-g++ -dumpspecs | grep frame-hdr
%{!static:--eh-frame-hdr}\
%{mfdpic: -m elf32bfinfd -z text} %{shared} %{pie} \
%{static:-dn -Bstatic} %{shared:-G -Bdynamic} \
%{!shared: %{!static: %{rdynamic:-export-dynamic} \
%{!dynamic-linker:-dynamic-linker \
%{mglibc:%{muclibc:%e-mglibc and -muclibc used together;:%e-mglibc not supported for this target};:/lib/ld-uClibc.so.0 \
}}}\
%{static}} -init __init -fini __fini
Run Code Online (Sandbox Code Playgroud)
我该如何覆盖此选项?我无法使用-Wl,--no-eh-frame-hdr,因为没有任何类似的定义.
我正在尝试通过CMake在我的Visual Studio 2013项目上启用AVX2代码生成,到目前为止,我运气不好.
我尝试过的事情是:
CMAKE_CXX_FLAGS_*为包含/arch:AVX2如下:SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:AVX2")SET_TARGET_PROPERTIES("myproject" PROPERTIES COMPILE_FLAGS "/arch:AVX2").我也试过更换COMPILE_FLAGS用COMPILE_DEFINITIONS,COMPILE_FEATURES(无法生成项目)和COMPILE_OPTIONS.每次我尝试生成项目时,我都会确保删除CMake缓存,这样就不会妨碍生成项目文件.
我错过了什么?任何有助于阐明这一点的帮助将非常感激.谢谢你的时间.
我一直在尝试编译一个我在网上找到的简单的多线程代码,以学习如何多线程.
要运行这段代码,我需要使用编译器标志:-pthread和-std=c++0x.
但每当我尝试添加标志时,构建日志都不会显示它们被使用.
我已经尝试了一些在线的通用技巧,以使这些工作起作用,但它们都没有奏效.有人可以帮忙吗?
我已经尝试了在线的其他建议,以便为代码块添加编译器标志,但是当我这样做并检查构建日志时,它们都不会出现.
当类破坏三阶规则(或五阶规则)时,是否可以触发编译器警告?
此功能听起来很容易实现,在安全关键软件中非常有用,但我无法在文档或Google搜索结果中找到它.
有一段时间Kotlin允许设置kotlin.incremental=true,从1.1.2开始也有kotlin.compiler.incremental=true.
我想知道这两者有什么区别?
几年前,我C0000006 external exception在一些特定局域网上从共享文件夹运行一个大型(100 + MB)exe时偶然发现了.所以我开始使用这个问题中描述的编译器标志.
在数百个网络中的数百个客户多年成功"执行exe"后,我开始遇到PE标志的问题(不知何故,exe在同一台PC上启动时崩溃,一次排除一个原因,我根据经验发现评论这些标志工作).
不知怎的,我找到的解决方法是两次构建我的exe(并让客户选择部署哪一个),第一个用这些:
{$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP}
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}
Run Code Online (Sandbox Code Playgroud)
第二个评论那些.
这个建筑开销很烦人,我想避免它.我不认为有办法,但我要求专家建议:有没有办法"在运行时激活那些标志?" 例如,传递命令行参数?
我想到的另一个解决方法是在exe开始时本地复制exe,这样它总是从本地机器执行,但我担心我需要面对的场景,即使从技术上讲它很简单.
谢谢.