编译静态链接静态库的共享对象时遇到了很多问题.此问题仅出现在x84_64平台上.在x86_32上进行相同的编译工作时,我没有任何问题.
也许这是一个特定于操作系统的GCC配置,但我的研究表明它是如何在x86_64平台上运行GCC的.无论如何,我在Ubuntu 10.04 x86_64上使用gcc 4.4.3.
问题是如何解决的?...确保使用-fPIC编译所有静态库依赖项.
问题1: -fpic和-fPIC之间有什么区别(显然-fPIC会在x86上生成更多指令)?为什么后一种类型在x86_64上下文中更相关?
问题2:我的假设是,当您链接静态代码时,您在链接时将函数硬连接到二进制文件中,为什么它需要"位置无关代码"机制提供的间接级别?
问题3:现在如果x86不需要-fpic/-fPIC来链接共享对象与静态存档,为什么在x86_64中需要它?
问题4:即使需要,为什么不隐式提供?我认为突破性变化应该是一个很大的禁忌
gcc compilation dynamic-linking gnu-toolchain static-linking
您可以通过各种方式编译Python.我想知道我的Python编译的选项.
具体的用例:我的Python是用readline编译的吗?我知道我可以通过"import readline"来看到这个,但是我希望看到我的Python二进制文件的编译设置列表.
编辑:我的意思是Python可执行文件,而不是我自己编写的源代码.
我需要在RHEL上安装几个Python模块,我没有root访问权限.至少有一个模块也需要访问Python.h.
在这种情况下,我发现最好的方法是安装python及其依赖项~/local.它通常只是工作,但这次Python无法构建SSL模块(请参阅下面的详细信息).这是我正在做的事情的痕迹.
所以我下载了python 6源码然后关闭了我:
./configure --prefix=/home/fds/rms/local
make >& make.log
Run Code Online (Sandbox Code Playgroud)
对日志的检查显示ssl模块尚未编译,但没有提及原因(make或configure中没有其他ssl出现):
Failed to find the necessary bits to build these modules:
_bsddb _curses _curses_panel
_hashlib _sqlite3 _ssl <----------
Run Code Online (Sandbox Code Playgroud)
所以我想,python根本找不到任何ssl库(这很奇怪,但是嘿......).所以我下载openssl-0.9.8r和
./config --prefix=/home/fds/rms/local shared
make
make install
Run Code Online (Sandbox Code Playgroud)
现在回到Python,我./configure并重新制作.它失败了,但这一次有所不同:
Failed to build these modules:
_hashlib _ssl
Run Code Online (Sandbox Code Playgroud)
仔细检查日志文件可以发现:
gcc -pthread -shared build/temp.linux-x86_64-2.6/home/fds/rms/installers/Python-2.6.6/Modules/_ssl.o -L/home/fds/rms/local/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-x86_64-2.6/_ssl.so
*** WARNING: renaming "_ssl" since importing it failed: libssl.so.0.9.8: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以现在它正在拿起图书馆,但不是很正确(文件应该在哪里):
$ find /home/fds/rms/local …Run Code Online (Sandbox Code Playgroud) 我试图在我的ARM Ubuntu机器上按照本指南重新安装我的ffmpeg .不幸的是,当我编译一个使用这个lib的程序时,我得到以下失败:
/usr/bin/ld: /usr/local/lib/libavcodec.a(amrnbdec.o): relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavcodec.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
现在我想像-fPIC编译器建议的那样重新编译它,但我不知道如何.任何帮助表示赞赏.
所以我试图TensorFlow从源代码编译(使用 2019 年 1 月 31 日从他们的 git 存储库中的克隆)。我从他们的 shell 脚本(https://github.com/bazelbuild/bazel/releases/download/0.21.0/bazel-0.21.0-installer-linux-x86_64.sh)安装了 Bazel 。
我./configure在 tensorflow 代码中执行并提供了默认设置,除了添加我的机器特定的 -m 选项(-mavx2 -mfma)并将 python 指向正确的 python3 位置(/usr/bin/py3)。然后我按照 tensorflow 指令运行以下命令:
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package //tensorflow:libtensorflow_framework.so //tensorflow:libtensorflow.so
Run Code Online (Sandbox Code Playgroud)
现在它继续运行和运行,我还没有看到它完成(虽然我被限制让它运行最多大约 10 个小时)。它产生大量信息:有关有符号和无符号整数的警告以及控制到达非空函数的末尾。这些似乎都不是致命的。编译继续打勾,两个数字继续增长('[N,NNN / X,XXX] 4 个操作正在运行'),文件通过“编译”打勾。
这台机器是一个 EC2 实例,具有 ~16GiB 的 RAM,CPU 是“Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz”,我相信 4 核,大量的硬盘空间(尽管编译似乎吃掉了 QUITE一点,> 1GiB)
关于这里发生了什么的任何想法?
我对C++类结构感到困惑.
我有一个名为FxMathFunctions.h的.h和一个名为FxMathFunctions.cpp的.cpp
.h开头像:
class FxMathFunctions
{
public:
FxMathFunctions();
~FxMathFunctions();
Run Code Online (Sandbox Code Playgroud)
并在.cpp
我有:
#include "FxBasicTypes.h"
#include "FxMathFunctions.h"
FxMathFunctions::FxMathFunctions() {}
FxMathFunctions::~FxMathFunctions() {}
Run Code Online (Sandbox Code Playgroud)
我收到的错误如下:
error: new types may not be defined in a return type
error: return type specification for constructor invalid
Run Code Online (Sandbox Code Playgroud)
这必须与某个地方的定义有关,但我不知道这可能发生在哪里.
在启动应用程序或通过ant编译JSP时,Tomcat 7 Jasper会抱怨多余或错位的JAR文件.我得到了以下信息
**compile-jsp:**
[jasper] Jul 31, 2012 7:15:15 PM org.apache.jasper.compiler.TldLocationsCache tldScanJar
[jasper] INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Run Code Online (Sandbox Code Playgroud)
如何在扫描期间跳过不需要的JAR可以改善tomcat中的启动时间和JSP编译时间?
如何实现更好的输出?
在我用Swift编写的iPhone应用程序变得非常大(> 150 .swift文件+各种Objective-C库)后,Xcode开始表现得非常糟糕:
每一次编译我都会遇到各种错误,例如:
Command failed due to signal: Segmentation fault: 11
我只是想知道每个人是否都有同样的问题,也许有人找到了减少这种噩梦的方法?
到目前为止我做了什么 - 我将项目拆分为几个动态框架,我从主项目链接,它有助于减少编译时间,但引入一些新问题.
我还使用iRamDisk将DerivedData文件夹保存在RAM中并定期从中删除所有文件,它有时会导致SourceKit崩溃.
只是一个帖子来帮助那些尝试这样做的人,因为我没有博客.
这也适用于linux.随意编辑并改进它.