我试图了解Linux中动态库的加载时间链接(使用gcc -l)与运行时链接(使用dlopen(), dlsym())的机制差异,以及这些机制如何影响库的状态及其符号的地址.
我有三个简单的文件:
libhello.c:
int var;
int func() {
return 7;
}
Run Code Online (Sandbox Code Playgroud)
libhello.h:
extern int var;
int func();
Run Code Online (Sandbox Code Playgroud)
main.c中:
#include <inttypes.h>
#include <stdio.h>
#include <stdint.h>
#include <dlfcn.h>
#include "libhello.h"
int main() {
void* h = dlopen("libhello.so", RTLD_NOW);
printf("Address Load-time linking Run-time linking\n");
printf("------- ----------------- ----------------\n");
printf("&var 0x%016" PRIxPTR " 0x%016" PRIxPTR "\n", (uintptr_t)&var , (uintptr_t)dlsym(h, "var" ));
printf("&func 0x%016" PRIxPTR " 0x%016" PRIxPTR "\n", (uintptr_t)&func, (uintptr_t)dlsym(h, "func"));
}
Run Code Online (Sandbox Code Playgroud)
我用命令编译libhello.c gcc -shared -o libhello.so -fPIC …
我无法在Windows上为OpenCV(Python)自动完成工作。
根据此处的 Abid的说明,我将cv2.pyd文件粘贴到C:\ Python27 \ Lib \ site-packages中。
在Python代码中,我如下导入:
import cv2.cv as cv
Run Code Online (Sandbox Code Playgroud)
我还安装了numpy,它在站点包中创建了自己的文件夹,这与OpenCV不同(我直接将其粘贴到站点包中)。
使用此设置,即使调用OpenCV方法,代码也不会出现任何问题。
但是我无法自动完成工作。我试图使其在Sublime Text 2(与SublimeCodeIntel)和PyCharm上一起工作。在两个IDE中,自动完成功能都适用于numpy导入,但不适用于OpenCV导入。
我正在使用OpenCV 2.4.6和Python 2.7(32位)。
任何可能的解决方案?
我正在为Blender 2.69 开发一个插件。我在插件中使用 PIL 库的图像模块。
根据我在互联网上找到的说明,我首先安装了PIL for Python33,然后将Python的site-packages中的文件夹复制到Blender的同一文件夹中。
Image.open() 等函数可以工作,读取 Exif 数据的函数也可以工作。
但是,以下语句失败,Blender 崩溃。
img.save(outputFileName)
Run Code Online (Sandbox Code Playgroud)
save()方法位于PIL的Image.py模块中。以下是相关部分:
try:
import builtins
except ImportError:
import __builtin__
builtins = __builtin__
...
...
def save(self, fp, format=None, **params):
...
try:
# Following statement fails, and Blender crashes.
save_handler(self, fp, filename)
finally:
if close:
fp.close()
Run Code Online (Sandbox Code Playgroud)
当使用 Python 3.3 解释器(而不是 Blender 解释器)执行时,同样的语句也有效。仅当图像格式为 PNG 时,此语句也适用于 Blender。对于所有其他格式(TIFF、PGM、JPEG 等),它会失败(在 Blender 中)。
我做了一些挖掘,最近在 Pillow github 存储库上报告了几个问题:(1) (2)
更有趣的是2009 年的这篇论坛帖子,其中报告了 Maya 的 Python 解释器内完全相同的行为。
发生这种情况时,我在 Blender 中找不到堆栈跟踪,因为 Blender …
python ×2
autocomplete ×1
blender ×1
c ×1
c++ ×1
gcc ×1
linux ×1
opencv ×1
pycharm ×1
sublimetext2 ×1