C++静态库与动态库(比较透彻)
https://www.cnblogs.com/findumars/p/7128511.html
编译加上 -shared -fPIC
编译目标改成 xxxx.so
CC = gcc
CXX = g++
CFLAGS = -g
CXXFLAGS = $(CFLAGS)
LIBPATH = ./
#指定搜索so库的路径
LIBS = -Wl,-rpath=./lib:./lib/xxx -lxxx
SRC = ./main.cpp
TARGET = ./xxxx.so
all:
$(CXX) $(OPTI) $(CXXFLAGS) -shared -fPIC $(SRC) -o $(TARGET) -L$(LIBPATH) $(LIBS)
.PHONY: clean
clean:
rm -f $(TARGET)
使用第三方so库,并指定搜索路径
g++ gate_sample.cpp -I inc/ -L build_linux/lib/x64/ -Wl,-rpath=./build_linux/lib/:./build_linux/lib/x64/ -lgatesdk
# ldd a.out
linux-vdso.so.1 => (0x00007ffe437f4000)
libgatesdk.so => ./build_linux/lib/x64/libgatesdk.so (0x00007fa968197000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fa967e900
so文件依赖和提供符号 查看
https://blog.csdn.net/farmwang/article/details/76389753
r$ ldd -r ./dist-debug/webrtc_agent/webrtcLib/build/Release/webrtc.node
undefined symbol: _ZN2v86String9Utf8ValueC1ENS_5LocalINS_5ValueEEE (./dist-debug/webrtc_agent/webrtcLib/build/Release/webrtc.node)
undefined symbol: _ZN2v88internal9Internals20CheckInitializedImplEPNS_7IsolateE (./dist-debug/webrtc_agent/webrtcLib/build/Release/webrtc.node)
undefined symbol: av_register_all (./dist-debug/webrtc_agent/webrtcLib/build/Release/webrtc.node)
undefined symbol: av_buffer_create (./dist-debug/webrtc_agent/webrtcLib/build/Release/webrtc.node)
undefined symbol: _ZN2v814ObjectTemplate11NewInstanceENS_5LocalINS_7ContextEEE (./dist-debug/webrtc_agent/webrtcLib/build/Release/webrtc.node)
undefined symbol: _ZN2v
c++filt _ZN2v86String9Utf8ValueC1ENS_5LocalINS_5ValueEEE
v8::String::Utf8Value::Utf8Value(v8::Local<v8::Value>)
-L、-rpath和-rpath-link的区别
https://www.cnblogs.com/candl/p/7358384.html
export LD_LIBRARY_PATH=/usr/local/log4cxx/lib:$LD_LIBRARY_PATH
#export LD_LIBRARY_PATH=/usr/local/log4cxx/lib
export LIBRARY_PATH=/usr/local/log4cxx/lib:$LIBRARY_PATH
LD_LIBRARY_PATH详解
https://www.jianshu.com/p/a62e1d327023