2017-02-16 7 views
1

Linux上で動作するC++を作成しました。その機能のうち、提供されたホストに対してpingを実行します。 pingは関連するPocoライブラリに基づいています。しかし生産C++の実行可能ファイルがlinuxのC++実行可能ファイルにMakefile経由でcap_net_raw機能を追加する方法

setcap cap_net_raw=ep /bin/C++_APP 

を与えることによって設定cap_net_raw能力を持つべきでLinux上で正常に実行するために、私はグーグルで見つかった例に基づいて以下のMakefileをもを使用しています。

CC := g++ 

# Folders 
SRCDIR := src 
BUILDDIR := build 
TARGETDIR := bin 

# Targets 
EXECUTABLE := C++_APP 
TARGET := $(TARGETDIR)/$(EXECUTABLE) 

SRCEXT := cpp 
SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT)) 
OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o)) 
CFLAGS := -c -Wall 
INC := -I include -I /usr/local/include 
LIB := -L /usr/local/lib -lPocoFoundation -lPocoNet -lPocoUtil 

$(TARGET): $(OBJECTS) 
@echo " Linking..." 
@echo " $(CC) $^ -o $(TARGET) $(LIB)"; $(CC) $^ -o $(TARGET) $(LIB) 

$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT) 
@mkdir -p $(BUILDDIR) 
@echo " $(CC) $(CFLAGS) $(INC) -c -o [email protected] $<"; $(CC) $(CFLAGS) $(INC) -c -o [email protected] $< 

clean: 
@echo " Cleaning..."; 
@echo " $(RM) -r $(BUILDDIR) $(TARGET)"; $(RM) -r $(BUILDDIR) $(TARGET) 

.PHONY: clean 

私は次のエラーましたしかし、私は最後のビルドコマンドとして

@echo "Setting Capabilities"; sudo setcap cap_net_raw=ep $(TARGETDIR)/$(EXECUTABLE) 

を次のコマンドを追加しました:私は、ビルド後にコマンドを与えるとき一方

Failed to set capabilities on file `bin/NPT' (Invalid argument) The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file

をC++実行可能ファイルのすべてが正常に動作します。私は間違って何をしていますか?

+0

「bin/NPT」と呼ばれる通常のファイルはありますか?また、正確にどこに追加しましたか?そして、 '$(TARGETDIR)/ $(EXECUTABLE)'を '$(TARGET)'を使って既存の行で使用したのはなぜですか? –

+0

@David Schwartz、はいNPTはC++ _ appの実際の名前です。 $(TARGET)も使用したときに同じエラーが発生しました – dk13

+0

外部ライブラリのインストールディレクトリをハードコーディングする代わりに 'pkg-config'を使用することができます(この場合は、 、 '/ usr/local')をMakefileに追加します。このようにして、あなたのプログラムをコンパイルするかもしれない他の人たちがあなたを呪いません。代わりに 'pkg-config'を呪います。 –

答えて

2

コマンドを間違った場所に追加しました。あなたはの後にの後に実行可能ファイルを追加する必要があります。これを試してください:

$(TARGET): $(OBJECTS) 
@echo " Linking..." 
@echo " $(CC) $^ -o $(TARGET) $(LIB)"; $(CC) $^ -o $(TARGET) $(LIB) 
@echo " Setting Capabilities"; sudo setcap cap_net_raw=ep $(TARGET) 
+0

ありがとう、それは完全に働いた。 – dk13

関連する問題