开发者社区 问答 正文

//usr/local/lib/libvod_sdk.so:undefined reference

视频点播的第三方库和sdk使用默认配置编译并安装成功。编译sample中的uploadVideo.cpp。 提示 //usr/local/lib/libvod_sdk.so:undefined reference to ‘curl_……' //usr/local/lib/libvod_sdk.so:undefined reference to 'oss_……‘ //usr/local/lib/libvod_sdk.so:undefined reference to 'uuid_……' //usr/local/lib/libvod_sdk.so:undefined reference to 'aos_……' //usr/local/lib/libvod_sdk.so:undefined reference to 'BIO_……' ……

makefile如下: INCLUDE = -I. INCLUDE += -I/usr/local/include INCLUDE += -I/usr/local/include/oss_c_sdk INCLUDE += -I/usr/local/include/curl INCLUDE += -I/usr/local/apr/include/apr-1 INCLUDE += -I/usr/local/include/vod_sdk INCLUDE += -I/usr/include/jsoncpp/json INCLUDE += -I/usr/include/uuid SRCS = UploadVideo.cpp OBJS = $(SRCS:.cpp=.o) CXX = g++ CFLAGS = -wall -o -g LIBS = lpthread -loss_c_sdk -lcurl -lmxml -lapr-1 -laprutil-1 -lvod_sdk -ljsoncpp EXE = out $(EXE):$(OBJS) $(XCC) $^ -o $@ $(LIBS)

%.o:%.cpp $(CXX) $(CFLAGS) $(INCLUDES) -c $< -o $@

clean: rm -f $(EXE) $(OBJS)提示//usr/local/lib/libvod_sdk.so:undefined reference

所有库都链接不到,有么有人遇到相同的问题

展开
收起
游客34y45x2ffih22 2020-06-01 18:11:45 1076 分享 版权
阿里云 AI 助理回答

遇到链接错误,提示“undefined reference”通常意味着编译器能够找到库文件,但是无法解析到实际的函数实现。这可能是由于以下几个原因造成的:

  1. 库的顺序问题:在链接命令中,库的顺序有时很重要,特别是当存在依赖关系时。确保与你的程序直接相关的库排在前面。

  2. 缺少必要的库:检查错误信息中提到的每个未定义引用(如curl_..., oss_..., uuid_..., aos_..., BIO_...),确保所有依赖这些函数的库都被正确地添加到了LIBS变量中,并且在链接命令中出现。

  3. 库路径问题:确认库文件的实际路径是否与-L指定的路径一致,以及库名是否与-l后面指定的名字匹配。有时候库文件可能位于其他目录下,需要通过-L来指定正确的路径。

  4. 静态/动态库混淆:确认你链接的是正确的库类型(静态或动态)。某些情况下,可能需要链接静态库而非动态库,或者反之。

  5. 编译选项不匹配:如果你的项目是64位的,确保所有链接的库也是64位的;如果是32位,则都应为32位。混合使用不同位数的库会导致链接错误。

针对你的Makefile,可以尝试以下修改:

  • 确保所有的-I-L路径都是正确的。
  • 调整LIBS的顺序,将直接依赖的库放在前面。
  • 检查是否有遗漏的库,根据错误提示添加相应的库。
  • 确保库的名称正确无误,例如 -loss_c_sdk 应该是 -loss_c_sdk 的笔误,应该是 -loss_c_sdk(注意前缀的-l后面跟着的是去掉lib前缀和.so后缀的库名)。

修正后的Makefile示例(部分修改):

INCLUDE = -I. \
           -I/usr/local/include \
           -I/usr/local/include/oss_c_sdk \
           -I/usr/local/include/curl \
           -I/usr/local/apr/include/apr-1 \
           -I/usr/local/include/vod_sdk \
           -I/usr/include/jsoncpp/json \
           -I/usr/include/uuid

SRCS = UploadVideo.cpp
OBJS = $(SRCS:.cpp=.o)
CXX = g++
CFLAGS = -Wall -g
LIBS = -lpthread -loss_c_sdk -lcurl -lmxml -lapr-1 -laprutil-1 -lvod_sdk -ljsoncpp
EXE = out

$(EXE): $(OBJS)
    $(CXX) $^ -o $@ $(CFLAGS) $(LIBS)

%.o: %.cpp
    $(CXX) $(CFLAGS) $(INCLUDE) -c $<

clean:
    rm -f $(EXE) $(OBJS)

请按照上述建议调整并重新编译,看是否能解决你的问题。如果问题依旧,请进一步检查是否有特定库的版本冲突或缺失。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答