我正在尝试在OS X上安装twitcurl并遇到了一些问题。
首先,运行make
会返回clang错误:ld: unknown option: -soname
。我查看了OS X上有类似问题的其他用户的回复,并找到了以下建议:
在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
我试过这个,但唯一的结果是另一个铿锵错误:clang: error: unknown argument: '-rpath=/usr/lib'
非常感谢任何关于在OS X系统上安装twitcurl的建议。
---- ---- UPDATE
我只想把我采取的所有步骤放在一个地方,以防万一有类似问题的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用户上面给出的建议中的两个字符不同)
,将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,以确保更改成功。
答案 0 :(得分: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
我现在还构建了相关的twitterClient实用程序。为此,我必须象征性地将libtwitcurl.dylib链接为libtwitcurl.dylib.1,并且还要更改代码中的使用者密钥和密码,以匹配我帐户上的apps.twitter.com中的有效密钥和密码。工作正常。
我假设你想从代码中使用twitcurl库? Twitter维护一个基于Ruby的实用程序twurl,它具有类似的功能,也可能有用。