在OS X上安装twitcurl

3

我尝试在OS X上安装twitcurl,遇到了一些问题。

首先,运行make会返回clang错误:ld: unknown option: -soname。我查看了其他在OS X上遇到类似问题的用户的回复,发现以下建议:

在makefile中更改:

LDFLAGS += -Wl,-rpath-link=$(STAGING_DIR)/usr/lib

to:

LDFLAGS += -rpath=$(STAGING_DIR)/usr/lib

变更:

$(CC) -shared -Wl,-soname,lib$(LIBNAME).so.1 $(LDFLAGS) -o lib$(LIBNAME).so.1.0 .o -L$(LIBRARY_DIR) -lcurl

to:

$(CC) -dynamiclib -shared -Wl,-install_name,lib$(LIBNAME).dylib.1 $(LDFLAGS) -o lib$(LIBNAME).dylib .o -L$(LIBRARY_DIR) -lcurl

我尝试了这个方法,但结果只是另一个clang错误: clang: error: unknown argument: '-rpath=/usr/lib'

如果您有任何安装twitcurl在OS X系统上的建议,将不胜感激。

----更新----

我想把所有我所做的步骤放在一个地方,以防将来遇到类似问题的OS X用户。非常感谢Andy Piper提供了关键信息。

打开makefile并替换:

LDFLAGS += -Wl,-rpath-link=$(STAGING_DIR)/usr/lib

为:

LDFLAGS += -rpath $(STAGING_DIR)/usr/lib

和:

$(CC) -shared -Wl,-soname,lib$(LIBNAME).so.1 $(LDFLAGS) -o lib$(LIBNAME).so.1.0 .o -L$(LIBRARY_DIR) -lcurl

为:

$(CC) -dynamiclib -shared -Wl,-install_name,lib$(LIBNAME).dylib.1 $(LDFLAGS) -o lib$(LIBNAME).dylib *.o -L$(LIBRARY_DIR) -lcurl (请注意,这比其他OS X用户给出的建议少两个字符)

运行make后,将libtwitcurl.dylib复制到/usr/lib/中。

下载twitterClient(也是我能找到的唯一代码示例),但编译它或自己的程序时,您还需要链接-lcurl。(g++ appname.cpp -ltwitcurl -lcurl

最后,一旦编译了一个程序,可执行文件中的路径名可能不正确。使用install_name_tool进行更正。对我来说,这看起来像:

install_name_tool -change libtwitcurl.dylib.1 /usr/lib/libtwitcurl.dylib nameofexecutable

但如果这对您没有用,请使用otool查找实际路径:

otool -L nameofexecutable

然后在-change后的第一个参数应该是libtwitcurl的错误路径。运行install_name_tool后,可以再次使用otool以确保更改成功。

1个回答

2
我可以让共享/动态库编译,但需要对您的Makefile进行一些调整:
LDFLAGS += -rpath $(STAGING_DIR)/usr/lib

并且

$(CC) -dynamiclib -shared -Wl,-install_name,lib$(LIBNAME).dylib.1 $(LDFLAGS) -o lib$(LIBNAME).dylib *.o -L$(LIBRARY_DIR) -lcurl

我现在也已经建立了相关的twitter客户端工具。为此,我必须将libtwitcurl.dylib符号链接为libtwitcurl.dylib.1,并且还要更改代码中的消费者密钥和秘密,以匹配我帐户上从apps.twitter.com获得的有效密钥。运行良好。
我假设您想从代码中使用twitcurl库?Twitter维护基于Ruby的实用程序twurl,它具有类似的功能,可能也很有用。

иҝҷдәӣжҳҜжҲ‘жүҖеҒҡзҡ„зӣёеҗҢжӣҙж”№ - еҪ“жҲ‘дҪҝз”Ёиҝҷдәӣжӣҙж”№иҝҗиЎҢsudo makeж—¶пјҢжҲ‘дјҡеҫ—еҲ°clang: error: unknown argument: '-rpath=/usr/lib' make: *** [target] Error 1- еҰӮжһңжҲ‘ж— жі•и®©е®ғе·ҘдҪңпјҢжҲ‘е°ҶдҪҝз”ЁеҸҰдёҖз§ҚиҜӯиЁҖиҝӣиЎҢејҖеҸ‘ - дҪҶеҰӮжһңеҸҜиғҪзҡ„иҜқпјҢжҲ‘жӣҙе–ңж¬ўдҪҝз”ЁC ++гҖӮ - Jonathan Basile
并不完全相同。注意:我的命令中rpath后面没有“=”号,在第二个命令中,是“*.o”而不是“.o”。 - Andy Piper
另外,您不应该需要使用 sudo 来执行此构建。 - Andy Piper
当我尝试不使用sudo时,我会得到一系列“error: unable to open output file”错误。对于错过的更改,我感到抱歉!make命令起作用了。但是,当我尝试编译示例程序时,我现在遇到了链接器错误。我按照说明将libtwitcurl.dylib移动到/usr/lib/,并尝试使用g++ program.cpp -ltwitcurl进行编译 - 我该如何找出clang正在查找库的位置? - Jonathan Basile
我也链接了-lcurl,现在唯一的错误是:Undefined symbols for architecture x86_64: "_main", referenced from: implicit entry/start for main executable - Jonathan Basile
1
没事了,我犯了一个错误。谢谢你的帮助!我现在还不能颁发赏金,但我会的。 - Jonathan Basile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接