Skip to content

Commit b53e64e

Browse files
committed
Dynamic linking bugfix
Fixed for both OS X and Linux. This fixes BVLC#3597 and fixes BVLC#3459.
1 parent 2ef5847 commit b53e64e

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

Makefile

+15-15
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,9 @@ ifeq ($(LINUX), 1)
261261
# boost::thread is reasonably called boost_thread (compare OS X)
262262
# We will also explicitly add stdc++ to the link target.
263263
LIBRARIES += boost_thread stdc++
264-
VERSIONFLAGS += -Wl,-soname,$(DYNAMIC_VERSIONED_NAME_SHORT) -Wl,-rpath,$(ORIGIN)/../lib
264+
VERSIONFLAGS := -Wl,-soname,$(DYNAMIC_VERSIONED_NAME_SHORT)
265+
LDFLAGS := -Wl,-rpath,'$$ORIGIN/../lib'
266+
PYTHON_LDFLAGS := -Wl,-rpath,'$$ORIGIN/../lib'
265267
endif
266268

267269
# OS X:
@@ -282,10 +284,11 @@ ifeq ($(OSX), 1)
282284
COMMON_FLAGS += -DGTEST_USE_OWN_TR1_TUPLE=1
283285
# boost::thread is called boost_thread-mt to mark multithreading on OS X
284286
LIBRARIES += boost_thread-mt
285-
# we need to explicitly ask for the rpath to be obeyed
286-
DYNAMIC_FLAGS := -install_name @rpath/libcaffe.so
287287
ORIGIN := @loader_path
288-
VERSIONFLAGS += -Wl,-install_name,$(DYNAMIC_VERSIONED_NAME_SHORT) -Wl,-rpath,$(ORIGIN)/../../build/lib
288+
# we need to explicitly ask for the rpath to be obeyed
289+
VERSIONFLAGS := -Wl,-install_name,@rpath/lib/$(DYNAMIC_VERSIONED_NAME_SHORT)
290+
LDFLAGS := -Wl,-rpath,$(ORIGIN)/..
291+
PYTHON_LDFLAGS := -Wl,-rpath,$(ORIGIN)/..
289292
else
290293
ORIGIN := \$$ORIGIN
291294
endif
@@ -407,7 +410,7 @@ else
407410
endif
408411
LDFLAGS += $(foreach librarydir,$(LIBRARY_DIRS),-L$(librarydir)) $(PKG_CONFIG) \
409412
$(foreach library,$(LIBRARIES),-l$(library))
410-
PYTHON_LDFLAGS := $(LDFLAGS) $(foreach library,$(PYTHON_LIBRARIES),-l$(library))
413+
PYTHON_LDFLAGS += $(LDFLAGS) $(foreach library,$(PYTHON_LIBRARIES),-l$(library))
411414

412415
# 'superclean' target recursively* deletes all files ending with an extension
413416
# in $(SUPERCLEAN_EXTS) below. This may be useful if you've built older
@@ -488,8 +491,7 @@ py: $(PY$(PROJECT)_SO) $(PROTO_GEN_PY)
488491
$(PY$(PROJECT)_SO): $(PY$(PROJECT)_SRC) $(PY$(PROJECT)_HXX) | $(DYNAMIC_NAME)
489492
@ echo CXX/LD -o $@ $<
490493
$(Q)$(CXX) -shared -o $@ $(PY$(PROJECT)_SRC) \
491-
-o $@ $(LINKFLAGS) -l$(LIBRARY_NAME) $(PYTHON_LDFLAGS) \
492-
-Wl,-rpath,$(ORIGIN)/../../build/lib
494+
-o $@ $(LINKFLAGS) -l$(LIBRARY_NAME) $(PYTHON_LDFLAGS)
493495

494496
mat$(PROJECT): mat
495497

@@ -552,7 +554,7 @@ $(ALL_BUILD_DIRS): | $(BUILD_DIR_LINK)
552554

553555
$(DYNAMIC_NAME): $(OBJS) | $(LIB_BUILD_DIR)
554556
@ echo LD -o $@
555-
$(Q)$(CXX) -shared -o $@ $(OBJS) $(VERSIONFLAGS) $(LINKFLAGS) $(LDFLAGS) $(DYNAMIC_FLAGS)
557+
$(Q)$(CXX) -shared -o $@ $(OBJS) $(VERSIONFLAGS) $(LINKFLAGS) $(LDFLAGS)
556558
@ cd $(BUILD_DIR)/lib; rm -f $(DYNAMIC_NAME_SHORT); ln -s $(DYNAMIC_VERSIONED_NAME_SHORT) $(DYNAMIC_NAME_SHORT)
557559

558560
$(STATIC_NAME): $(OBJS) | $(LIB_BUILD_DIR)
@@ -584,19 +586,19 @@ $(TEST_ALL_BIN): $(TEST_MAIN_SRC) $(TEST_OBJS) $(GTEST_OBJ) \
584586
| $(DYNAMIC_NAME) $(TEST_BIN_DIR)
585587
@ echo CXX/LD -o $@ $<
586588
$(Q)$(CXX) $(TEST_MAIN_SRC) $(TEST_OBJS) $(GTEST_OBJ) \
587-
-o $@ $(LINKFLAGS) $(LDFLAGS) -l$(LIBRARY_NAME) -Wl,-rpath,$(ORIGIN)/../lib
589+
-o $@ $(LINKFLAGS) $(LDFLAGS) -l$(LIBRARY_NAME)
588590

589591
$(TEST_CU_BINS): $(TEST_BIN_DIR)/%.testbin: $(TEST_CU_BUILD_DIR)/%.o \
590592
$(GTEST_OBJ) | $(DYNAMIC_NAME) $(TEST_BIN_DIR)
591593
@ echo LD $<
592594
$(Q)$(CXX) $(TEST_MAIN_SRC) $< $(GTEST_OBJ) \
593-
-o $@ $(LINKFLAGS) $(LDFLAGS) -l$(LIBRARY_NAME) -Wl,-rpath,$(ORIGIN)/../lib
595+
-o $@ $(LINKFLAGS) $(LDFLAGS) -l$(LIBRARY_NAME)
594596

595597
$(TEST_CXX_BINS): $(TEST_BIN_DIR)/%.testbin: $(TEST_CXX_BUILD_DIR)/%.o \
596598
$(GTEST_OBJ) | $(DYNAMIC_NAME) $(TEST_BIN_DIR)
597599
@ echo LD $<
598600
$(Q)$(CXX) $(TEST_MAIN_SRC) $< $(GTEST_OBJ) \
599-
-o $@ $(LINKFLAGS) $(LDFLAGS) -l$(LIBRARY_NAME) -Wl,-rpath,$(ORIGIN)/../lib
601+
-o $@ $(LINKFLAGS) $(LDFLAGS) -l$(LIBRARY_NAME)
600602

601603
# Target for extension-less symlinks to tool binaries with extension '*.bin'.
602604
$(TOOL_BUILD_DIR)/%: $(TOOL_BUILD_DIR)/%.bin | $(TOOL_BUILD_DIR)
@@ -605,13 +607,11 @@ $(TOOL_BUILD_DIR)/%: $(TOOL_BUILD_DIR)/%.bin | $(TOOL_BUILD_DIR)
605607

606608
$(TOOL_BINS): %.bin : %.o | $(DYNAMIC_NAME)
607609
@ echo CXX/LD -o $@
608-
$(Q)$(CXX) $< -o $@ $(LINKFLAGS) -l$(LIBRARY_NAME) $(LDFLAGS) \
609-
-Wl,-rpath,$(ORIGIN)/../lib
610+
$(Q)$(CXX) $< -o $@ $(LINKFLAGS) -l$(LIBRARY_NAME) $(LDFLAGS)
610611

611612
$(EXAMPLE_BINS): %.bin : %.o | $(DYNAMIC_NAME)
612613
@ echo CXX/LD -o $@
613-
$(Q)$(CXX) $< -o $@ $(LINKFLAGS) -l$(LIBRARY_NAME) $(LDFLAGS) \
614-
-Wl,-rpath,$(ORIGIN)/../../lib
614+
$(Q)$(CXX) $< -o $@ $(LINKFLAGS) -l$(LIBRARY_NAME) $(LDFLAGS)
615615

616616
proto: $(PROTO_GEN_CC) $(PROTO_GEN_HEADER)
617617

0 commit comments

Comments
 (0)