2012-02-07 3 views
0

私はすべてのGNU makeマニュアルを検索して読みました....しかし、私はオープンソースプロジェクトを鉱山に組み込むことはできません。 私を助けることができますか?オープンソースプロジェクトを別のプロジェクトに組み込んでいます

単純な例: 提供された.pcapファイルに有効な4方向ハンドシェイクがあるかどうかを確認するために、私のプロジェクトにcoWPAttyを含めたいと思います。 だから、私は=> argc = 4;でcowpatty main()を呼び出すだけです。 argv [] = {"my_program"、 "-r"、 "pcap_file.pcap"、 "-c"}。しかし..どのように2つの関数main()がある場合私はそれをコンパイルできますか? 私はcowpatty main()をcow_main()に変更しようとしていますが、それはうまくいきますが、prepocessorステートメントやすべてのソースコードを保持する何らかの方法でこれを行うことができるかどうかはわかります。

私のMakefileがあることである:ここ

COW_SRC=./cow_src 
COW_DEP:= `sed -ne 's/^PROGOBJ[^a-z0-9A-Z]*\(.*\)/\1/gp' < $(COW_SRC)/Makefile` 

LDLIBS= -lmagic -lm -lcrypto -lpcap 

crack_server: cow 
    $(RM) $(COW_SRC)/genpmk.o 
    $(CC) $(LDLIBS) -g -o tmp ./tmp.c $(COW_SRC)/*.o 

cow: 
    make -C $(COW_SRC) $(COW_DEP) 

clean: 
    for i in $(COW_DEP);\ 
     do $(RM) $(COW_SRC)/$$i;\ 
    done; 

とはcoWPAttyを構築し、インストールした後、ちょうどあなたのプログラムから呼び出すsystemを使用

#include <stdio.h> 
#include <stdlib.h> 
#include <magic.h> 


int main(int argc, char *argv[]) 
{ 
    cow_main(argc,argv); 
    return 0; 
} 
+0

正しい#includeと#defineの魔法が可能ですが、それは本当に悪い考えです。本質的にあなたがやっているのは、ライブラリとして使われることは決してなかったプログラムをライブラリとして扱うことです。あなたは別のプログラムとしてcoWPAttyを保持し、それを呼び出すために 'system'を使うか、あるいはあなたのプロジェクトにインクルードできるようにそのコードをリファクタリングするべきです。 –

+0

@ g.inozemtsev - ご意見ありがとうございます。ですから、coWPAttyをライブラリやAPIに "変換"するためのソースコードを修正する必要があります...これは合法ですか? GPL v3の下で? –

+0

あなたのプログラムにGPLコードを組み込み(そして配布する)には、ソースコードを配布する必要があります。どのようにコードにリンクしても問題ありません。もちろん、あなたの私的使用のためにこのプログラムを書いて、それを配布しないなら、あなたは何でもできます。 このコードをクローズドソースアプリケーションで使用することを前提としていましたが、別の方法で質問を読みました。 GPLv3プロジェクトでcoWPAtty(GPLv2を使用する)を組み込みたい場合は、ライブラリのアプローチが適しているようです。 GPLv2を使用する "libcowpatty"を作成し、GPLv3コードにリンクします。しかし、私はライセンスの専門家ではありません。 –

答えて

0

シンプルtmp.cがある

int main(int argc, char *argv[]) 
{ 
    int status = system("cowpatty my_program -r pcap_file.pcap"); 
    return status; 
} 
+0

私は(可能であれば)system()呼び出しを避けたいです。 –

+0

次に、cowpattyソースを手動で編集して、 'main()'を別の関数名に変更する必要があります。 – markgz

関連する問題