我在Mac OSX(Lion)上下载并安装了(我认为)gtk.在得到所有-I是正确的之后,测试程序的编译很顺利.现在链接失败了.缺少入口点的grep
_gtk_init
_gtk_window_new
... 11 more
Run Code Online (Sandbox Code Playgroud)
在/Users/ccpalmer/gtk/inst/lib/libgtk-quartz-2.0.0.dylib /Users/ccpalmer/gtk/inst/lib/libgtk-quartz-2.0.dylib中找到它们
不太熟悉OSX的底层Unix,我不知道如何通过链接步骤.我必须承认,我以前从未遇到过"dylib".
是否有任何OSX开发技术专家可以揭开我的神秘面纱?
查尔斯
使用 Xcode,我希望从 mach-o 捆绑包二进制文件中重新导出符号(具体来说是一个函数),该符号最初是在 dylib 中定义的。
我已经尝试过 -sub_library 链接器开关,但这似乎没有重新导出 dylib 符号,可能是因为我自己没有构建 dylib(?)
Xcode 的链接器似乎不支持 reexport-l / reexport_library 开关。
有任何想法吗?
基本上,我尝试从 savReaderWriter 模块运行一些 Python 代码,以便创建一个可以在 IBM SPSS 中打开的 .sav 文件。作为 macOS 用户,我需要首先在终端中运行这两行以使模块正常工作:
echo 'export DYLD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/savReaderWriter/spssio/macos' >> ~/.bash_profile
echo 'export LC_ALL=en_US.UTF-8' >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
下面你可以看到我尝试在 Python 中运行的一段代码:
import savReaderWriter
savFileName = "someFile.sav"
records = [['Test1', 1, 1], ['Test2', 2, 1]]
varNames = ['var1', 'v2', 'v3']
varTypes = {'var1': 5, 'v2': 0, 'v3': 0}
with savReaderWriter.SavWriter(savFileName, varNames, varTypes, ioUtf8=True) as writer:
for record in records:
writer.writerow(record)
Run Code Online (Sandbox Code Playgroud)
我的问题是,虽然通过 Terminal.app 在 Python 中运行代码就像一个超级按钮,并且出现一个新的 .sav 文件,但尝试在 IDE 中执行完全相同的代码(尝试过 PyCharm 和 Spyder)会出现错误:
Traceback (most recent call last): …Run Code Online (Sandbox Code Playgroud) 在 macOS 上,dylib 有一个兼容版本和一个当前版本作为元数据,每个版本都有x.y.z.. otool -L可以显示这些。
系统或各种工具/程序如何以及何时使用这些版本?
对于兼容性版本,我发现:
问题:
x.y.z?比较是字典顺序吗?还是x、y、z分别有特殊含义?ls -l /usr/lib/libz*我看到同一个库有许多不同的符号链接,每个符号链接的名称都有不同的版本。我在 macOS 上使用 Conda,在构建 Rust 包时遇到错误,无法找到该libpython3.7m.dylib库。我怎样才能找到这个?
经过一些研究后,在 Linux 上,您通常可以从python-devUbuntu 上安装它,或者通过在 Python 编译期间启用 --enabled-shared 来安装它。
我有一个第三方OS X dylib,我正在我的应用程序中使用,并且无法轻松访问其创建者.我想确定它是否与-flat_namespace链接.那可能吗?如果是这样,怎么样?
我有一个C动态库,由于一些需求变化,我必须做一些重构.
我在一个c文件中有以下代码.
__attribute__((noinline))
static void *find_document(...)
{
...
}
bool docuemnt_found(const char *name) {
...
find_document(...);
...
}
Run Code Online (Sandbox Code Playgroud)
我在不同的cpp文件中分离了docuemnt_found()函数.现在docuemnt_found()函数无法链接到find_document()方法?
我尝试为c文件创建标题然后包含标题使用extern "C"但它不起作用.
我想保持find_document()内联.这里有什么遗漏或有什么不对吗?
我为iOS创建了一个Xcode 4项目模板,它依赖于几个框架和libsqlite3.dylib.我已经能够自动添加框架,但似乎无法弄清楚如何添加dylib.有人有运气吗?
编辑:
我想我不够清楚,我创建了自己的.xcodetemplate文件,当我创建一个新项目时,该文件显示为项目模板.我需要知道在TemplateInfo.plist文件中放置什么以使libsqlite3.dylib文件包含在从模板创建的新项目中.我已成功地通过在目标 - >项目0->框架键下列出它们来添加诸如CoreMotion之类的.framework文件,但这对dylib不起作用.
我将我的应用程序转换为firemonkey的第一步是转换我的应用程序使用的一些dll.
任何人都可以指出一些有助于我完成此过程的文档吗?dll的设计考虑了跨平台(使用尽可能多的增强功能),所以一旦我了解它,我不会太担心dll的内部.
几个具体问题......
在delphi端,LoadLibrary和GetProcAddress是wind32 API的一部分.我找不到其他平台的文档?
在XCode中,我创建了一个动态库项目,可以看到"GCC可见性"如何对导出的类起作用.我假设它只是被绑定的功能相同.如何设置导出类型.即外部"C"?
提前致谢.
马丁
我正在尝试为iOS创建一个动态库并在运行时加载它.在看了这个问题和这个答案之后,我一直在使用iOSOpenDev并在我的iPhone上部署所有内容.dylib的xCode项目名为KDylibTwo,我修改的文件是:
KDylibTwo.h
#import <Foundation/Foundation.h>
@interface KDylibTwo : NSObject
-(void)run;
@end
Run Code Online (Sandbox Code Playgroud)
KDylibTwo.m
#import "KDylibTwo.h"
@implementation KDylibTwo
-(id)init
{
if ((self = [super init]))
{
}
return self;
}
-(void)run{
NSLog(@"KDylibTwo loadded.");
}
@end
Run Code Online (Sandbox Code Playgroud)
为了测试我的库是否有效,在构建它以进行性能分析后(iOSOpenDev在iPhone上部署它的方式),我可以找到它存储在我的设备上/usr/lib/libKDylibTwo.dylib并构建一个调整(再次使用iOSOpenDev),按如下方式挂接SpringBoard:
#include <dlfcn.h>
%hook SBApplicationIcon
-(void)launch{
NSLog(@"\n\n\n\n\n\n\nSBHook For libKDylibTwo.dylib");
void* dylibLink = dlopen("/usr/lib/libKDylibTwo.dylib", RTLD_NOW);
if(dylibLink == NULL) {
NSLog(@"Loading failed.");
} else {
NSLog(@"Dylib loaded.");
void (*function)(void);
*(void **)(&function) = dlsym(dylibLink, "run");
if (function) {
NSLog(@"Function found.");
(*function)();
} else {
NSLog(@"Function …Run Code Online (Sandbox Code Playgroud)