ant*_*009 26 c++ static-libraries
g ++(Ubuntu/Linaro 4.4.4-14ubuntu5)4.4.5
我有以下名为sdpAPI.a的静态库.我在尝试将其与我的测试应用程序链接时遇到问题.只是想知道我是否做错了什么.静态库是用g ++构建的;
我的目录如下:
/projects/unit_test/main.c
/projects/unit_test/sdp/inc/sdpAPH.h
/projects/unit_test/sdp/lib/sdpAPI.a
Run Code Online (Sandbox Code Playgroud)
我的源代码是这样的:
#include <stdio.h>
#include "sdpAPI.h"
int main(void)
{
printf("----- TEST SDP ------\n");
try {
sdpSessionDescription sdp;
sdp.clear();
}
catch(...) {
printf("----- TEST FAILED --------\n");
return 0;
}
printf("------ TEST SUCCESSFULL ------\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的Makefile是这样的:
OBJECT_FILES = main.o
CC = g++
CFLAGS = -Wall -Wextra -Wunreachable-code -ggdb -O0
TARGET = sdp_demo
INC_PATH = -I sdp/inc
LIB_PATH = -L sdp/lib/sdpAPI.a
$(TARGET): $(OBJECT_FILES)
$(CC) $(CFLAGS) $(INC_PATH) $(LIB_PATH) $(OBJECT_FILES) -o $(TARGET)
main.o: main.c
$(CC) $(CFLAGS) $(INC_PATH) $(LIB_PATH) -c main.c
clean:
rm -f $(TARGET) $(OBJECT_FILES) *~
Run Code Online (Sandbox Code Playgroud)
这些是我得到的链接器错误:
undefined reference to `sdpSessionDescription::sdpSessionDescription()'
undefined reference to `sdpSessionDescription::clear()'
undefined reference to `sdpSessionDescription::~sdpSessionDescription()'
undefined reference to `sdpSessionDescription::~sdpSessionDescription()'
Run Code Online (Sandbox Code Playgroud)
非常感谢任何建议,
pax*_*blo 46
-L指定库路径,而不是特定的库.您可能希望-L sdp/lib -l sdpAPI同时指定路径和库名称.
虽然它会尝试前缀和postfix的你的库名lib,要么.a或.sl(或类似).
因此,您可能还需要libsdpAPI.a根据gcc联机帮助页重命名库:
-l xyz
链接器搜索库的标准目录列表,该库实际上是一个名为的文件libxyz.a.
还要记住,命令行中的事物顺序很重要.通过执行$(CC) $(CFLAGS) $(INC_PATH) $(LIB_PATH) $(OBJECT_FILES) -o $(TARGET)(对象之前的库),在列出库的位置没有未解析的符号,因此不会从该库中引入任何内容.
然后,当您最终引入对象(带有未解析的符号)时,它们将保持未解析状态,因为之后没有列出任何库.
您通常应该在对象之后执行库:
$(CC) $(CFLAGS) $(INC_PATH) $(OBJECT_FILES) $(LIB_PATH) -o $(TARGET)
Run Code Online (Sandbox Code Playgroud)
确保在检查库之前知道所有未解析的符号.
这不会捕获所有问题(例如可以使用其他方法修复的共同依赖库),但它会确保在查看库之前已知对象文件中的所有未解析符号.
从上面引用的手册页的同一部分:
它在您编写此选项的命令中有所不同; 链接器按照指定的顺序搜索和处理库和目标文件.因此,在文件之后但之前
foo.o -lz bar.o搜索库.如果引用函数,则可能无法加载这些函数.zfoo.obar.obar.oz
ice*_*ime 10
-L用于指定库路径:
-
Ldir将目录dir添加到要搜索-l的目录列表中.
-l是您需要指定链接的库:
-llibrary 链接时搜索名为library的库.
你可能需要 -L sdp/lib/ -l sdpAPI
| 归档时间: |
|
| 查看次数: |
68132 次 |
| 最近记录: |