- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
对标题感到抱歉,真的想不出其他任何东西来描述这个问题:)
好的,事情是这样的:我正在尝试在 Linux 下使用专有的免费软件应用程序(因此出现了问题;如果我有源代码,我可以重建它)。此外,我试图在不受支持的 Linux 版本上运行它,并且应用程序的几乎所有组件都单独工作,但不能一起工作(如果应用程序完全运行,它们应该如此)。
让我澄清一下。有一个 GUI,可以在不受支持的操作系统中正常启动。然后,从这个 GUI 中,您可以调用一堆命令行工具 - 有用的是,GUI 还会吐出在每种情况下调用的命令行。
现在,从 GUI 调用其中一些命令失败了 - 然而,因为我调用了实际的命令行(假设:“extprogram -arg1 1 -arg2 2 ...
”),我可以从终端重复这些。因此,我发现整个应用程序都带有自己的 libc 库;并使用这些库,(一些)命令(从终端运行)往往会失败 - 但是,我发现从命令行,这通常适用于那些失败的命令:
LD_PRELOAD=/usr/lib/libstdc++.so.6 extprogram -arg1 1 -arg2 2 ...
# or alternatively, this works too:
# LD_LIBRARY_PATH=/usr/lib extprogram -arg1 1 -arg2 2 ...
(换句话说,使用系统 libstdc++ 而不是应用程序提供的库,往往可以解决问题)
所以,现在如果我可以说服 GUI 使用“LD_PRELOAD
”/“LD_LIBRARY_PATH
”调用这些工具 - 我想,一切都会正常...
不幸的是,GUI 不调用将进一步调用这些可执行文件的脚本,我可以直接更改这些可执行文件(据我通过 grep
ping 所见)- 看起来,它是 GUI 可执行文件创建系统调用;我尝试了“strace
”-ing,但我找不到类似临时脚本或任何我可以更改的内容...
所以,我想也许我可以通过制作可执行的 bash 脚本来“作弊”;所以我移动可执行文件 - 并创建一个脚本,该脚本应该使用 LD_
前缀调用移动的可执行文件:
mv extprogram extprogram.old
cat > extprogram <<EOF
LD_LIBRARY_PATH=/usr/lib extprogram $@
EOF
...但这失败了;显然 GUI 应用程序识别出了一些不对的地方。
所以,我在想 - 是否有可能以某种方式拥有 C/C++ 代码“包装器”,以某种方式“加载”此可执行文件,但在具有“LD_LIBRARY_PATH=/usr/lib
"设置 - 并将其参数传递给它(并返回它的返回值)?然后我可以在操作系统上本地构建这个“包装器”,使用与原始可执行文件相同的名称 - 并让整个工作正常,而无需触及原始可执行文件(重命名除外)。
非常感谢您的回答,
干杯!
最佳答案
你很接近。您忘记了 shebang 并使脚本可执行。您还调用了错误的外部程序。最后,我将使用旧脚本的绝对路径,因为您不知道 GUI 的 CWD 是什么。
mv extprogram extprogram.old
cat > extprogram <<EOF
#!/bin/sh
LD_LIBRARY_PATH=/usr/lib exec /psth/to/extprogram.old "$@"
EOF
chmod +x extprogram
关于c++ - 作弊 Linux : executables and dependent libraries via LD_PRELOAD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7988552/
有时我一直在努力理解为什么在尝试创建航路点任务时任务管理器会收到错误“无法执行执行”。我附上了我正在使用的工作流程,如果您能看一下,我将不胜感激。 1.Initialize FlightControl
我正在 Python 中使用 SQLAlchemy 核心,并且我已多次阅读文档,但仍然需要有关 engine.execute() 的说明。与 connection.execute() . 据我了解,e
在我的 Zend 框架项目中,我想检查是否设置了 cookie。如果是这种情况,我想使用 cookie 内容登录用户。 由于我必须在调用任何 Controller 之前执行此自动登录,因此我尝试将其放
我正在尝试为我创建的 2 个选择语句的 UNION 创建一个 View 。 UNION 在单独执行时工作正常 但问题是当我将它作为 View 执行时,只有 UNION 的第一部分被执行。 我正在使用的
下面我写了一个简单的例子来演示我遇到的问题。执行代码后,我得到一个 cygwin 异常 7200。我环顾四周并尝试了一些事情,但没有解决。有人可以解释为什么我得到它,我该如何解决?感谢您抽出宝贵时间,
从池中获取连接然后在连接上调用 execute 而不是直接在池对象上调用 execute 的用例是什么? 在 Pool 的文档中类,显示此示例: con = await pool.acquire()
我正在尝试通过 SQL 将变量中的 2 个值插入表中,代码完成时没有错误,但条目未显示在表中。 我尝试在即时窗口中执行代码,但这给了我一个关于括号的错误(我真的不知道如何在那里正确输入提示),所以我将
我对广播接收器有点困惑。我有一个广播接收器,它在 TIME_SET 和 TIMEZONE_CHANGED 操作时触发(代码在下面给出)。我想知道的是,当 TIME_SET 和 TIMEZONE_CHA
我必须与需要随每个请求发送访问 token 的外部服务集成。访问 token 的到期时间很短(只有几个小时)。我决定以乐观的方式使用访问 token 。我将使用当前 token 调用外部服务。如果出现
如果我在 swift 中运行以下代码,步骤 1.、2.、3. 和 4. 是否始终按此顺序执行(它们应该如此),或者如果循环存在异步执行的风险,排序等,花费的时间比预期的要长? // 1. fo
我在我的 C++ 应用程序中看到访问冲突错误。在发生违规并使用 !analyze 时将 windbg 附加到进程时,我发现访问违规是由于试图执行不可执行的地址。我知道导致此问题的正在执行的地址。什么可
在使用 Ubuntu 大约一年之后,这对我来说是第一次。 我接手了一个跟踪维修的汽车服务项目。我可以看到每个文件的完整源代码,但是有一个没有扩展名的文件,但在 Ubuntu 中,属性显示为可执行文件(
什么是 LinqPad“自动跟踪执行”和“跳转到执行点”?如何使用它们,如果你能给出一个详细的例子将不胜感激。 最佳答案 这不是一个详细的示例,但它说明了该功能。如果你有一个像 "1".Dump()
我使用 Q.js 来实现 promise 。在下面的代码中,每个方法都会进行 ajax 调用,然后返回一个 Promise。一切都按预期进行,每个方法在下一个方法开始之前执行并完成: function
我有一个类,它实现了 Runnable接口(interface),并且是一个一旦启动就会无限期运行的任务(长时间运行的线程)。 public class LongRunningTask impleme
PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: 无效的参数数量:绑定(bind)变量的数量与标记数量不匹配 我收到此错
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
想要为执行的每个 linux 命令添加 aspect:executionTime 有什么方法可以添加默认方面环境,以便必须为执行的 linux 命令获取 executionTime 最佳答案 根据 m
我正在尝试安装一个名为 MFOC 的工具.我按照其网站中提到的说明进行操作,如下所示: ebrahim@ubuntu:~$ cd Desktop/mfoc-master/ ebrahim@ubuntu
我刚开始使用 numba 来提高我的程序的性能。我已经减少了我将要呈现的情况 import numba as nb import numpy as np from time import time d
我是一名优秀的程序员,十分优秀!