teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

追加の質問、更新

2018/07/11 12:03

投稿

MF_19
MF_19

スコア27

title CHANGED
File without changes
body CHANGED
@@ -1,3 +1,70 @@
1
+ ###追加質問です
2
+ 下記で質問させて頂いてましたが、新たなエラーが出てきたので
3
+ 質問させて頂きます。
4
+
5
+ もともと3つの.aファイルをを共有ライブラリに静的に結びつけようとしていて
6
+ undifineのエラーが出ていました。(実行ファイルのmake時)
7
+
8
+ 試しに別の.aファイルを試すとこちらは上手く静的に結びつき
9
+ undifineのエラーが出ませんでした。
10
+
11
+ 同じ方法でもともとの.aファイルで実行するとエラーが出てくるので
12
+ ここの部分が問題かと思います。
13
+
14
+ 新たなエラー
15
+ ```
16
+ NPACK -shared obj/region_layer.o obj/utils.o obj/local_layer.o obj/shortcut_layer.o obj/im2col.o obj/data.o obj/batchnorm_layer.o obj/dropout_layer.o obj/image.o obj/convolutional_layer.o obj/gru_layer.o obj/detection_layer.o obj/avgpool_layer.o obj/col2im.o obj/normalization_layer.o obj/inferencer.o obj/train.o obj/lstm_layer.o obj/network.o obj/crnn_layer.o obj/layer.o obj/deconvolutional_layer.o obj/rnn_layer.o obj/reorg_layer.o obj/crop_layer.o obj/softmax_layer.o obj/box.o obj/list.o obj/matrix.o obj/connected_layer.o obj/gemm.o obj/parser.o obj/option_list.o obj/activations.o obj/cuda.o obj/blas.o obj/activation_layer.o obj/maxpool_layer.o obj/route_layer.o obj/tree.o obj/cost_layer.o /opt/openblas/lib/libopenblas.a /home/NNPACK/lib/libpthreadpool.a -o libsensor.so
17
+ /usr/bin/ld: /home/NNPACK/lib/libpthreadpool.a(threadpool-pthreads.c.o): relocation R_X86_64_32 against `.text' can not be used when making a shared object; recompile with -fPIC
18
+ /home/NNPACK/lib/libpthreadpool.a: error adding symbols: Bad value
19
+ collect2: error: ld returned 1 exit status
20
+ Makefile:93: recipe for target 'libtest.so' failed
21
+ make: *** [libsensor.so] Error 1
22
+ ```
23
+ sharedの引数に2つの.aファイルを追加しています。
24
+ libopenblas.a(新たに試した.a)
25
+ libpthreadpool.a(もともとの.a)
26
+
27
+ ###追加の質問
28
+ このエラーについて-fPICを追加する必要があるように思ったのですが、
29
+ すでに付いている認識でいます。どこを変更すれば宜しいでしょうか?
30
+
31
+ もしくは.aファイル作成時(cmake)に必要なのでしょうか。
32
+ つまり.aファイルを作り直す?
33
+
34
+ よろしくお願いします。
35
+
36
+ makeファイル変更点
37
+ ・ifeq ($(OPENBLAS), 1)部分追加
38
+ ・$(DLIB)の引数にlibopenblas.a、libpthreadpool.aを追加
39
+ ```
40
+ (省略)
41
+ ifeq ($(OPENBLAS), 1)
42
+ INCLUDE+= -static -DOPENBLAS -I/opt/openblas/include
43
+ CFLAGS+= -DOPENBLAS -DSTBI_NO_HDR -DSTBI_NO_LINEAR
44
+ LDFLAGS+=/opt/openblas/lib/libopenblas.a
45
+ endif
46
+
47
+ ifeq ($(NNPACK), 1)
48
+ INCLUDE+= -static -DNNPACK -I/home/NNPACK/deps/pthreadpool/include -I/home/NNPACK/include/nnpack -I/home/NNPACK/deps/cpuinfo/include
49
+ CFLAGS+= -DNNPACK
50
+ LDFLAGS+= /home/NNPACK/lib/libpthreadpool.a /home/NNPACK/lib/libnnpack.a /home/NNPACK/lib/libcpuinfo.a
51
+ endif
52
+
53
+ (省略)
54
+
55
+ all: $(TARGET) $(DLIB)
56
+
57
+ $(TARGET): $(OBJECTS)
58
+ $(COMPILER) $(CFLAGS) $(LIBS) -o $@ $^ $(LDFLAGS)
59
+
60
+ $(DLIB): $(OBJECTS) /opt/openblas/lib/libopenblas.a /home/NNPACK/lib/libpthreadpool.a
61
+ $(COMPILER) $(CFLAGS) -shared $^ -o $@
62
+
63
+ (省略)
64
+ ```
65
+
66
+ ###ここから下は当初の内容です
67
+
1
68
  ### 前提・実現したいこと
2
69
  makeファイルを用いてc++のコンパイルがしたいです。
3
70