2011-07-18 4 views
0

OS Xを実行するリモートサーバで作業していたCプロジェクトをコンパイルしようとしています。このプロジェクトはlibcurlに一部依存しています。私は管理者アカウントを介して遠隔からしかマシンにアクセスできません。gccはOS Xのコマンドラインにlibcurlを含んでいません

私がプロジェクトを作成しようとすると、定義されていないlibcurl関数と定数に関するエラーが発生します。私は、libcurlがコンパイラに正しく組み込まれていないと結論づけます。

私はすべての依存関係(postgres、curl、その他)のためにopensourceソフトウェアをインストールするためにfinkを使用していますが、カールを除くすべての依存関係が動作するようです。

私のコンパイラのコマンドは次のようになります。私はそうのようなテストファイル作成した場合

gcc -ggdb -ansi -Wall -D_GNU_SOURCE -L `/sw/bin/pg_config --libdir` `/sw/bin/curl-config --cflags` -I `/sw/bin/pg_config --includedir` -lpq -lcurl -lpthread -lm `/sw/bin/curl-config --libs` -c Client.c 

/sw/bin/curl http://www.google.com/ --libcurl test.c 

をし、次いで、それをコンパイルしよう:

gcc test.c `/sw/bin/curl-config --cflags` `/sw/bin/curl-config --libs` -o test.o 

また、失敗する。誰も私がこの問題についていくつかの光を当てるのを助けることができますか?

+1

私はfinkをインストールしていませんが、2番目の例は私のシステムカールで動作します。あなたの2番目の例では、出力を 'test.o'に送りますが、gccに' -c'フラグを渡していないので、これはあなたが期待していることではないかもしれません。 – Hugh

答えて

2

一つコンパイル行は次のとおりです。

gcc -ggdb -ansi -Wall -D_GNU_SOURCE -L `/sw/bin/pg_config --libdir` \ 
    `/sw/bin/curl-config --cflags` -I `/sw/bin/pg_config --includedir` \ 
    -lpq -lcurl -lpthread -lm `/sw/bin/curl-config --libs` -c Client.c 

このClient.cを取るとClient.o、オブジェクトファイルを生成します。ライブラリ情報は必要ありません。 -cオプションのためにリンクが行われません。

他のコンパイルラインは次のとおりです。

gcc test.c `/sw/bin/curl-config --cflags` `/sw/bin/curl-config --libs` -o test.o 

.o 'で実行ファイルの名前を終了するaconventionalです。それは混乱につながります。しかし、test.cが標準ライブラリとlibcurlの関数のみを参照する場合は、 '動作する'必要があります。

私のMacにはcurl-configのコピーが/usr/binにあります。

$ cat curltest.c 
#include <stdio.h> 
#include <curl/curl.h> 

int main(void) 
{ 
    if (curl_global_init(0) == CURLE_OK) 
    { 
     printf("CURL version %s\n", curl_version()); 
     curl_global_cleanup(); 
    } 
    else 
     fprintf(stderr, "Failed to initialize CURL\n"); 

    return 0; 
} 
$ cc -o curltest $(curl-config --cflags) curltest.c $(curl-config --libs) 
$ file curltest 
curltest: Mach-O 64-bit executable x86_64 
$ otool -L curltest 
curltest: 
    /usr/lib/libcurl.4.dylib (compatibility version 6.0.0, current version 6.1.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11) 
$ curltest 
CURL version libcurl/7.19.7 OpenSSL/0.9.8r zlib/1.2.3 
$ 

これは、MacOS Xの10.6.8にある:


は、このテストプログラムを試してみてください。

+0

私はcurl-configの2つのコピーを持っています。/usr/binには、/ sw/bin /の出力とは異なる出力を与えるものがあります。/sw /はすべての私のfinkのインストールを含んでいるディレクトリなので、私はそれを選ぶ。実際には実際には動作しません。 – KeatsKelleher

関連する問題