在Apache上用mod_wsgi运行Django时出现的Python链接问题:未找到符号__cg_jpeg_resync_to_restart
当我尝试在Apache上运行Django网站时,我会遇到此错误.该网站在开发服务器上工作: ViewDoesNotExist at / Could not import myproject.modulename.views. Error was: dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_tkinter.so, 2): Symbol not found: __cg_jpeg_resync_to_restart Referenced from: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO Expected in: /Applications/MAMP/Library/lib
0 2024-02-28
编程技术问答社区
在Apache上用mod_wsgi运行Django时的Python链接问题:未找到符号_c_jpeg_resync_to_restart
当我尝试在Apache上运行Django网站时,我会遇到此错误.该网站在开发服务器上工作: ViewDoesNotExist at / Could not import myproject.modulename.views. Error was: dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_tkinter.so, 2): Symbol not found: __cg_jpeg_resync_to_restart Referenced from: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO Expected in: /Applications/MAMP/Library/lib
2 2024-02-27
编程技术问答社区
使用Android NDK预建静态和共享库时的链接问题
我有一个我正在移植的程序,该程序在创建可执行文件时将多个库链接在一起.我已经使用独立工具链构建了所有这些库,并使用独立的工具链可以创建在Android设备上工作的可执行文件.因此,似乎我构建的库是功能性的.现在,我试图将这些库与应用程序结合起来.所以,在我的android.mk中,我有类似的东西: LOCAL_PATH := $(call my-dir) ROOT_PATH := $(LOCAL_PATH) include $(call all-subdir-makefiles) include $(CLEAR_VARS) LOCAL_PATH = $(ROOT_PATH) LOCAL_MODULE := test-libs LOCAL_STATIC_LIBRARIES := staticA LOCAL_SHARED_LIBRARIES := sharedA sharedB sharedC sharedD LOCAL_SRC_FILES := test-libs.c
2 2024-02-17
编程技术问答社区
安卓静态链接与针对glibc的动态链接的比较
我一直在跨编译一些Linux工具(以及我自己的C代码中的一些),以及我面临的挑战之一是Android的LIBC具有一些缺失/剥离的组件,我最终会修补我的代码以制造以制作它与Android的LIBC一起使用(例如,对于此类问题, Q1:与ARM工具链(或NDK-build)交叉编译时,如何在静态上与GLIBC(和其他依赖关系)进行静态链接? Q2:在静态上链接到Android的二进制文件是一个好主意吗?如果我开始静态链接,我应该期望任何事情都会破裂吗?有任何性能/内存问题吗? 我了解静态与动态链接的大多数利弊 - c ++应用程序 - 我应该使用静态或库的动态链接?和 静态链接与动态链接 所以我想知道我是否应该在交叉编译二进制时静态地将glibc连接到android. 解决方案 首先在libc上有一个小笔记. Android libc是bionic libc(比gnu libc(glibc).因此,NDK中包含的libc是仿生的,在Android设备上可用的LIB
2 2024-02-17
编程技术问答社区
获取安卓x86系统的VBox客户插件
我在VirtualBox上运行Android X86,我希望启用指针集成,该集成需要在访客操作系统上安装VirtualBox访客添加. 我已经搜索了很多,但是我发现的是,必须使用Android-X86内核标题编译来宾添加.任何人都可以分享该怎么做? 预先感谢. 解决方案 所以我没有解决方案,但是它至少在提供虚拟盒兼容图像的商业软件上完成. 其他解决方案 只是在主机计算机选项卡中禁用"鼠标集成". 参考. https://code.google.com/p/android -x86/essugy/deface?id = 341#makechanges 其他解决方案 根据VirtualBox论坛的主持人Sasquatch的说法,Android不是受支持的来宾操作系统,网址为 Android不是受支持的客座操作系统,因此没有GA.另外,它 不符合客人加法支持的要求:您不能 为内核安装支持软件包,以制作内核模块.在 至少我知道.
6 2024-02-02
编程技术问答社区
导致 "从共享对象映射段失败:操作不允许 "的可能原因是什么,以及如何进行调试?
我有两个可执行文件,都在Android中运行.我已经将两个都放在同一目录中的设备上.我将所有共享库放在同一目录中,包括LD-Linux.so.3.我通过使用: 运行可执行文件 ld-linux.so.3 - library-path/path/to/libraries executable_name 在以任何用户身份运行时,两者都在较旧版本的Android上工作.两者都可以在最新版本的Android上使用,如果运行为root.当以任何用户而运行时,只有一个在最新版本的Android上工作.相反,它给出: 无法从共享对象映射段:executable_name操作不允许 如何找出与无法运行的可执行文件有什么不同? 我在网上阅读了很多,大多数遇到此错误的人: a)没有对其依赖或可执行的库之一执行权限. 或 b)试图从安装为noexec的目录中运行. 这两个似乎都不是这样.它可以找到所有库,我可以自己加载任何库,看看它取决于解决的其他内容.另外
38 2024-01-30
编程技术问答社区
jQueryUI标签-去掉链接到标签内容中
我不确定目前是否可以使用,并且完成的测试似乎提供了奇怪的结果. 我在一页上有一个4个选项卡的部分,在这些选项卡中,我每个文本都给出了一个唯一的锚名. 我要做的是从另一页链接到选项卡3中的第4个块... 这些选项卡都可以正常工作,如果我链接到第一个选项卡上的内容部分. 我尝试了 这根本不起作用 当我只使用 时 我也已经看到了这一点 - 但是,它似乎具有与使用上述代码相同的功能 $(function(){ $('tabs').tabs(); var hash = location.hash; $('tabs').tabs( "select" , hash ); }); 在选择第三个选项卡时,使用上述两个选项中的任何一个,都将我一直推到页面的底部.我认为
6 2024-01-14
编程技术问答社区
为什么fPIC在64位平台上是绝对必要的,而在32位平台上则不是?
我最近收到了: ...重置R_X86_64_32针对"本地符号"时无法使用共享对象时使用;用-fpic 重新编译 尝试编译程序作为共享库时的错误. 现在,解决这个问题并不难(将所有依赖性与-fpic重新编译),但是经过一项研究,事实证明,此问题仅在X86-64平台上存在.在32位上,动态加载程序仍然可以重新定位任何依赖位置的代码. 最好的 x86具有.TEXT重新定位的支持(这是您有 位置依赖性代码).这种支持是有代价的,即每个 包含此类搬迁的页面基本上没有展示,即使 位于共享库中,从而破坏了共享的概念 libs.因此,我们决定在AMD64上禁止此允许(此外它创造了 问题如果该值需要超过32位,因为所有.TEXT仅重置 具有尺寸" word32") ,但我认为这还不够.如果搬迁破坏了共享库的概念,为什么可以在32位平台上完成?另外,如果需要对小精灵格式进行更改以支持64位,那么为什么并不是所有的尺寸都增加以适应? 这可能是一个小点,但是这是由于a)所讨
22 2024-01-08
编程技术问答社区
如何确定OS X dylib是否以-flat_namespace链接?
我有一个我在应用程序中使用的第三方OS X Dylib,并且不容易访问其创建者.我想确定它是否与-flat_namespace链接.那可能吗?如果是这样,如何? 解决方案 在库上运行otool -hV.如果您看不到TWOLEVEL,则与-flat-namespace链接.例如: twolevel.dylib: Mach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC_64 X86_64 ALL 0x00 DYLIB 8 672 NOUNDEFS DYLDLINK TWOLEVEL NO_REEXPORTED_DYLIBS vers flat.dylib: Mach header magic cputype cpusubtype caps filetype
2 2023-12-19
编程技术问答社区
链接被抬高了...什么是-rpath?MacOS X
所以,我正在构建一个项目,并且它使用了编译库(.dylib或.so)的功能.我在适当的位置有标题和库文件(这是Qtroot的一部分),但是当我尝试在Xcode中构建项目时,我会收到一个调试器错误: dyld:库未加载: @rpath/librio.so 从:/users/paulthompson/documents/programming/build offuct/debug/macheliosm.app/cottents/cottents/macos/macheliossim引用 原因:未找到图像 共享元素施加载荷规则全部 数据格式暂时不可用,将在"继续"之后重新尝试. (目前无法打电话给加载程序,它已锁定.) 现在,如果我从Finder打开程序,则构建的程序本身将正常运行,但是每当我尝试从Xcode运行它时,它都会对我bar.这是什么问题,即使Xcode本身知道它们在哪里,为什么调试器也找不到库,显然是从发现者跑时的程序? 解决方案 这是二进制中存储的一条路径,可
0 2023-12-18
编程技术问答社区
DYLD_PRINT_STATISTICS没有显示任何东西
从静态库转移到框架后,我正在尝试配置应用程序启动.我们有30个左右的框架(FYI:Cocoapods),因此我想检查它不会影响性能.团队中的轶事测试说不是,但我也想要一些数字! 我添加了环境变量DYLD_PRINT_STATISTICS和DYLD_PRINT_LIBRARIES以查看链接器在做什么,但是我获得的所有输出都来自DYLD_PRINT_LIBRARIES变量.我可以看到这些框架正在正确加载,但没有从中获得统计信息. 我已经尝试重新启动设备以确保框架还不在内存中,但没有帮助. 关于为什么我没有从DYLD_PRINT_STATISTICS>? 获得任何输出的其他建议 解决方案 while 其他标志 >在设备上正常工作,DYLD_PRINT_STATISTICS似乎仅在模拟器上工作(对我来说,iOS 9.0). in dyld的这个版本(可能是无关的)版本. CPP,来自OSX 10.10.5 设备似乎没有明显排除DYLD_PRINT_STATISTIC
14 2023-12-18
编程技术问答社区
汇编程序输出不能在我的Linux机器上运行
我跟进了; assembly program that calls a C function on 64-bit Linux ; ; int main(void) { ; printf(fmt, 1, msg1); ; printf(fmt, 2, msg2); ; return 0; ; ; Assemble in 64-bit: nasm -f elf64 -o hp64.o -l hp64.lst hello-printf-64.asm ; ; Link: ld hp64.o -o hp64 -lc --dynamic-linker /lib/ld-2.7.so ; or maybe ld hp64.o -o hp64 -lc --dynamic-linker /lib/ld-linux-x86-64.so.2 ; (the "-lc" option is needed to resolve "printf") ;----------------------------------
2 2023-12-16
编程技术问答社区
构建含有递归函数的.so
在进行某个项目时,我面临着无法构建库的问题.我有这样的错误,例如:重新定位R_x86_64_pc32在制作共享对象时无法使用符号'';用-fpic 重新编译 最终,我设法找到了根本原因.它在库中是递归功能.例如,我有以下良好的示例: .section .text .globl factorial .type factorial,STT_FUNC factorial: push %rbp mov %rsp,%rbp mov 16(%rbp),%rax cmp $1,%rax je end_factorial dec %rax push %rax #this is how we pass the argument to function call factorial pop %rbx inc %rbx imul %rbx,%rax end_factorial: mov %rbp, %r
2 2023-12-16
编程技术问答社区
从64位汇编中调用C函数
在Ubuntu上16.04 $ cat hola.asm extern puts global main section .text main: mov rdi,message call puts ret message: db "Hola",0 $ nasm -f elf64 hola.asm $ gcc hola.o /usr/bin/ld:hola.o:relocation r_x86_64_pc32抗符号 ``puts @@ glibc_2.2.5''在制作共享对象时无法使用; 与-fpic 重新编译 /usr/bin/ld:最终链接失败:不良价值 Collect2:错误:LD返回1退出状态 使用: $gcc -fPIC hola.o -o hola && ./hola Hola 文档: -fpic如果支持目标机器,则散发与位置无关的代码,适用于动态链接并避免对大小的任何限制
6 2023-12-16
编程技术问答社区
Linux内核是如何确定ld.so'的加载地址的?
我知道动态链接器使用mmap()加载库.我猜是内核将可执行文件及其.interp重载加载到同一地址空间中,但是如何确定何处?我注意到禁用ASLR的ld.so的负载地址为0x555555554000(在x86_64上) - 此地址来自何处?我尝试遵循do_execve()的代码路径,但是它太大了,以至于我不要像地狱一样困惑. 解决方案 阅读有关 elf ,特别是 elf(5),以及关于 execve(2) syscall. 精灵文件可能包含解释器. elf(5)提及: PT_INTERP数组元素指定位置和 零终端路径名的大小要调用 作为口译员.该细分类型是 仅对可执行文件有意义(尽管 共享对象可能会发生).但是 文件中可能不会发生一次.如果 它存在,必须先于任何可负载之前 细分条目. 该解释器实际上几乎总是 execve(2) syscall正在使用该解释器: 如果可执行文件是动态链接的精灵可执行文件,则 PT_INTERP段中命名的解释器用于加载所需的 共
10 2023-12-16
编程技术问答社区
.plt .plt.got有什么不同?
.plt:在能够的段中,在plt[n]> 0中具有.got.plt Resolver链接plt[0] , .got .got.plt:在RW能力段中,只需地址 我从这篇文章中学到的: https://eli.thegreenplace. net/2011/11/03/独立的代码 - 派克 - 派克 - 件圆柱/ 问题 实际的Linux Shell命令给了我不同的答案 $readelf -l /bin/bash got.plt消失了,什么是02段中的.plt.got? 我倾倒了两个部分(PLT,plt.got),并获得了此组件 .plt是我学到的: .plt.got,这是什么用? 对不起,倾倒不佳,是由 完成的 objcopy -O binary --only-section=.plt.got /bin/bash ./pltgot objcopy -O binary --only-section=.plt /bin/bash ./plt
12 2023-12-16
编程技术问答社区
这里的@plt是什么意思?
0x00000000004004b6 : callq 0x400398 有人知道吗? 更新 为什么两个disas printf给我不同的结果? (gdb) disas printf Dump of assembler code for function printf@plt: 0x0000000000400398 : jmpq *0x2004c2(%rip) # 0x600860 0x000000000040039e : pushq $0x0 0x00000000004003a3 : jmpq 0x400388 (gdb) disas printf Dump of assembler code for function printf: 0x00000
0 2023-12-16
编程技术问答社区
GOT和GOTOFF的区别
我是32位组装的初学者,我试图将简单的C程序编译成汇编.我了解其中的大多数,除非它使用gotoff. .file "main.c" .text .section .rodata .LC0: .string "Hello world" .text .globl main .type main, @function main: .LFB0: .cfi_startproc leal 4(%esp), %ecx .cfi_def_cfa 1, 0 andl $-16, %esp pushl -4(%ecx) pushl %ebp .cfi_escape 0x10,0x5,0x2,0x75,0 movl %esp, %ebp pushl %ebx pushl %ecx .cfi_escape 0xf,
4 2023-12-15
编程技术问答社区
为什么gcc会生成PLT,而它显然是不需要的?
考虑此代码: int foo(); int main() { foo(); while(1){} } int foo()在共享对象中实现. 用gcc -o main main.c -lfoo -nostdlib -m32 -O2 -e main --no-pic -L./shared编译此代码给出以下diasm: $ objdump -d ./main ./main: file format elf32-i386 Disassembly of section .plt: 00000240 : 240: ff b3 04 00 00 00 pushl 0x4(%ebx) 246: ff a3 08 00 00 00 jmp *0x8(%ebx) 24c: 00 00 add %al,(%eax) ... 00000250
4 2023-12-15
编程技术问答社区
怎样__libc_start_main@plt作品
要研究对象文件在Linux中加载和运行的方式,我制作了最简单的C代码,简单的文件名. int main(){} 接下来,我制作对象文件并将对象文件另存为文本文件. $gcc ./simple.c $objdump -xD ./a.out > simple.text 在许多互联网文章中,我可以动态加载启动功能,例如_start,_init,__libc_start_main@plt等.因此,我开始阅读我的汇编代码,并在 http://dbp-consulting.com/教程/调试/LinuxProgramStartup.html . 这是汇编代码的某些部分. 080482e0 : 80482e0: ff 25 10 a0 04 08 jmp *0x804a010 80482e6: 68 08 00 00 00 push $0x8 80482
8 2023-12-15
编程技术问答社区