问题标签 [fpic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 为什么我得到“头文件丢失”(出错)?
我正在尝试为我正在构建的网站安装地理编码器。我使用Geocoder是因为 Google Maps API 的查询限制无法满足我的需求。我安装了所有必需的 gem 并拥有 SQLite3。当我实际尝试安装地理编码器 gem (Geocoder::US) 时,运行 make 文件时出现错误。
我收到一个我无法弄清楚的错误。它提到了错误(在标题中),然后谈到了一个不存在的文件(sqlite3ext.h)。这是错误:
我知道这很模糊,但我已经工作了 10 多个小时试图安装它并且在网上几乎没有找到帮助。任何有关前进方向的建议将不胜感激。
mips - mips32 realease 2 上 -fPIC 的全局开销
众所周知,在为 linux 目标编译代码时,通过询问位置无关代码所增加的开销因架构而异。
最著名的例子是 x86_32(又名 IA32)和 x86_64 之间的区别:与 x86_32 不同,x86_64 增加的开销可以忽略不计。
我知道 X86,但是 mips32 大端的开销是多少?
c - 非独立 C 动态库(包含),有多少是可能的?
我正在用一种允许添加插件(共享库)的 API 用 C 语言编写格斗游戏。每个插件都是一种可以玩游戏的人工智能。可以在游戏期间的每个结束帧做出决定。我的插件有这种结构:
所以,我意识到我正在尝试用非面向对象语言实现一些对象,因此,“void * me”是一个标识调用者的变量。标头获取看起来像:
我的acquisition.c(API 部分......)文件目前包含:
最后,我主要这样做:
1 - >空间初始化(使用getter)在main中设置一个局部变量指向空间。(要点一) 2 -> 在我的结构空间的字段内分配一些内存。3 -> 在插件 bar.so 上的一堆 dlopen 之后召回 getter(第二点)
因此,我有一些冗长的冗长:
我想混合位置无关代码和非位置无关代码是不好的!!!!!!!我按如下方式处理编译:
我不知道:-fpic 代码在多大程度上可以依赖于非-fpic 代码(因为很多非 fpic 模块使用来自 acquire.c 的静态变量)?在这种模式中可以使用多少静态变量?
在纯 C 中设计这类问题是否有一种简单、安全和好的方法?我的意思是,在同一个程序上插入一些人工智能......
对不起我的英语和长...
assembly - nasm 问题重定位 R_X86_64_PC32 共享库
我正在使用 nasm 64 将 .S 编译为 .o,然后使用 gcc 创建一个共享库,如下所示:
source/rindex.S 调用 source/strlen.S 中的函数 strlen 编译行抛出错误:
编译 .S 时,我可以将 -fPIC 选项与 gcc 一起使用,但我使用的是 nasm,但找不到等效选项。
有人知道我怎样才能避免这个问题吗?
提前致谢。
gcc - -fPIC 和 -s 都使用了 - 可能是矛盾的?
在一个特定的项目中,我看到一次使用了以下编译器选项:
-fPIC
和-s
在这里一起使用是矛盾的吗?如果不是,为什么?
c++ - 为什么 dladdr 在 arm-linux 上的位置无关代码上返回可执行文件的路径?
在我使用 Emdebian 的 armhf 的 g++-4.7 交叉编译器为 arm-linux 交叉编译的一些代码中,我一直遇到 dladdr 的问题。问题似乎是,如果您传递给 dladdr 的函数指针是在可执行文件中调用的函数,则 dli_fname 将返回可执行文件的路径,而不是符号来自的共享库。
通过以下方式编译的示例:
/usr/bin/arm-linux-gnueabihf-g++-4.7 main.cpp -o main -ldl -fPIC
结果: printf 来自 ./main
如果我将 main() 的主体更改为
结果:printf 来自 /lib/arm-linux-gnueabihf/libc.so.6
我注意到,如果您传递给 dladdr 的函数指针的函数在可执行文件中被调用,则沿行的条目
是在可执行文件的 .rel.plt 部分中创建的,看起来 dladdr 是从 PLT 中找到 printf 的这个地址,而不是从 libc.so.6 中找到的正确地址,它会通过 GOT 找到。dladdr手册页建议将代码编译为位置独立应该可以解决此问题,但此编译器似乎并非如此。作为参考,上面显示的相同代码在带有 g++-4.7 的 x86_64 Linux 上按预期工作。
c++ - 如何以正确的方式编译和链接 C/C++ 共享对象库?
我开发了一个 C++ 类,它读取一个文本文件并将一些信息存储在 provate 变量中。为了解析文件,我使用了正则表达式库。在编译过程中出现我无法理解的错误。首先,我为我的班级制作了一个共享对象库。之后我尝试编译测试程序。这里发生错误:未定义的对 std::regex_iterator 的引用...
我在 unix 机器上使用以下命令进行编译:
g++ -c -fpic -m64 -std=c++11 Foo.h Foo.cpp
g++ -shared -m64 -std=c++11 -o libFoo.so Foo.o
g++ -m64 -std=c++11 -I. -L. -lFoo -o camelTest Foo.h main.cpp
为了重现错误,这里有一个小例子: example
在此先感谢您的帮助
c++ - 构建错误,cmake,制作共享对象时无法使用;使用 -fPIC 重新编译
当我使用 cmake 构建项目时,出现以下错误。尽管我尝试在 CMakeLists.txt 中添加编译标志-fPIC
,add_definition()
但此错误仍然存在。任何人都可以帮忙吗?我是cmake的新手。任何建议将不胜感激。
cross-compiling - 从库交叉编译中删除默认的 -fpic 标志
我在 SConstruct 中的环境设置如下:
尽管如此,scons 还是在编译中添加了 -fPic 参数:
由于 scons 缺少任何交叉编译功能,我想删除任何“强制打开”编译器参数。
我正在使用这个工具的 2.3.4 版本。
python - 从python访问没有-fPIC编译的库
我有一个闭源 x86_64 库,我想在 Linux 上从 Python 访问它。
我通常为此使用ctypes。
但是这个库是作为存档 (*.a) 文件提供的。我无法将库重新链接到动态 *.so,因为它是在没有 -fPIC 选项的情况下编译的。ctypes 需要 *.so dll。
除了向这个库的打包者抱怨之外,我还能做些什么来把它变成 *.so 吗?也许以某种方式编写包装函数?
编辑: