【问题标题】:Installing twitcurl on OS X在 OS X 上安装 twitcurl
【发布时间】:2015-06-14 03:02:03
【问题描述】:

我正在尝试在 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 错误:clang: error: unknown argument: '-rpath=/usr/lib'

任何关于在 OS X 系统上安装 twitcurl 的建议将不胜感激。

----更新----

我只想将我为完成这项工作所采取的所有步骤放在一个地方,以防将来有类似问题的任何 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 以确保更改成功。

【问题讨论】:

    标签: c++ macos twitter makefile clang


    【解决方案1】:

    我可以编译共享/动态库,但需要对您的 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,它具有类似的功能并且可能也很有用。

    【讨论】:

    • 这些是我所做的相同更改 - 当我使用这些更改运行 sudo make 时,我得到 clang: error: unknown argument: '-rpath=/usr/lib' make: *** [target] Error 1 - 如果我无法让它工作,我将使用不同的语言工作 - 但我如果可以的话,我更愿意使用 C++。
    • 不太一样。注意:在我的 rpath 之后没有“=”,在第二个命令中,有一个“*.o”而不是“.o”
    • 另外 - 你不应该(!)需要使用 sudo 来执行这个构建。
    • 当我尝试不使用 sudo 时,会收到一系列 error: unable to open output file 错误。我很抱歉错过了这些变化! make 命令有效。但是,当我尝试编译示例程序时,我现在遇到了链接器错误。我按照说明将 libtwitcurl.dylib 移至 /usr/lib/,并尝试使用 g++ program.cpp -ltwitcurl 进行编译 - 我如何找出 clang 在哪里寻找库?
    • 没关系。我犯了一个错误。感谢您的帮助!我还不能奖励赏金,但我会的。
    猜你喜欢
    • 2013-09-13
    • 2013-12-21
    • 2010-10-28
    • 2013-08-23
    • 2014-12-14
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多