标签: static-libraries

如何在C中的.a(静态库)文件中使用函数?

我在Eclipse中有一个静态库项目,它被编译成.a文件.那么现在我将如何使用该库中的函数和常量?我会加入我的包括:

#include "mylib.a"
Run Code Online (Sandbox Code Playgroud)

c static-libraries

0
推荐指数
1
解决办法
6732
查看次数

为C++类创建最小的发布就绪头文件

我创建了一个C++类,我将它放在自己的静态库中.

我还决定创建一个最小的头文件,允许其他人看到public:该类的一部分.所以我基本上采用了原始的头文件(相当长,包含类private:public:部分类等),并删除除了public:部分之外的所有内容(简短,只有构造函数/析构函数和一个公共函数).

为了测试我已经创建了一个使用该库的虚拟项目.问题是,每当我在该项目中使用最小头文件时,它就会崩溃,例如:

test(44349) malloc: *** error for object 0x7fdab2c242e8: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
Run Code Online (Sandbox Code Playgroud)

但每当我包含原始头文件时,它都可以正常工作.

可能是什么问题呢?它-Wall使用最小和原始头文件编译好(即使没有警告).

c++ header-files static-libraries osx-lion

0
推荐指数
1
解决办法
183
查看次数

ld找不到libmysqlclient

我记得,几年前当我开始使用mySQL时,设置"就是这样"是一件噩梦,以便找到库(特别是mySQL库!).就我而言,我相信ldconfig是解决问题的工具.闪存到2012年 - 刚刚安装了一个包含64位Ubuntu 12.04的新"主"系统,我正在确保所有源代码都能编译.想象一下,我很惊讶我和libmysqlclient一起回到同一条船上.

我的网络搜索显示了很多尝试,没有任何帮助.一路走来,我发现了这个诀窍:gcc ...... mysql_config --cflags --libs- 非常好,但是没有用.

因此,例如,结果:

gcc -D_FILE_OFFSET_BITS=64 `mysql_config --cflags --libs` \
            -o check-my-ip \
            -s check-my-ip.c ../common/ini-file.c
Run Code Online (Sandbox Code Playgroud)

 /tmp/ccxAgCqr.o: In function `updateTables':
 /usr/local/src/check-my-ip/check-my-ip.c:373: undefined reference to `mysql_init'
 /usr/local/src/check-my-ip/check-my-ip.c:374: undefined reference to `mysql_real_connect'
 /usr/local/src/check-my-ip/check-my-ip.c:381: undefined reference to `mysql_error'
 /usr/local/src/check-my-ip/check-my-ip.c:381: undefined reference to `mysql_errno'
 /usr/local/src/check-my-ip/check-my-ip.c:397: undefined reference to `mysql_field_count'
 /usr/local/src/check-my-ip/check-my-ip.c:398: undefined reference to `mysql_use_result'
 /usr/local/src/check-my-ip/check-my-ip.c:399: undefined reference to `mysql_fetch_row'
 /usr/local/src/check-my-ip/check-my-ip.c:419: undefined reference to `mysql_free_result'
 /usr/local/src/check-my-ip/check-my-ip.c:422: undefined reference to `mysql_field_count'
 /usr/local/src/check-my-ip/check-my-ip.c:429: undefined reference to `mysql_close'
 /tmp/ccxAgCqr.o: …
Run Code Online (Sandbox Code Playgroud)

c mysql shared-libraries ld static-libraries

0
推荐指数
1
解决办法
4257
查看次数

在制作图书馆时应该避免MACRO

该库提供了一个派生类,派生类作为模板参数.

例:

class userclass : public lib::superclass<userclass>
{}
Run Code Online (Sandbox Code Playgroud)

你可以看到很多东西要打字.并且"userclass"应该始终公开,以使其正常工作.所以我提出了两个看起来像这样的MACRO:

#define SUPER(x) public lib::superclass<x>
#define SUPERCLASS(x) class x : public lib::superclass<x>
Run Code Online (Sandbox Code Playgroud)

用户现在可以键入任何一个.

class userclass : SUPER(userclass)
{}

SUPERCLASS(userclass)
{}
Run Code Online (Sandbox Code Playgroud)

但主要问题是,MACER SUPER和SUPERCLASS存在于用户全局命名空间中,与包含的标题一样快.

可以/我应该:

  1. 有一种方法可以保留命名空间要求,但仍然默认为公共派生?
  2. 按原样使用宏.
  3. 只需要用户写出完整的"public lib :: superclass".

我正在使用vs 11,该库是针对Windows开发人员的.

c++ macros static-libraries visual-c++

0
推荐指数
1
解决办法
99
查看次数

关于gcc中静态库的一些问题

我创建了两个库libsa.alibsb.a.该功能FuncA的libsa.afuncblibsb.a这就要求FuncA的.

在main函数中,我只调用funcb.编译器显示"...未定义引用` funca '".编译器命令如"gcc main.c -o main -lsa -lsb".

当我在main函数中添加funca时,问题得以解决.

我能做什么?

抱歉我的英语不好!

c gcc static-libraries

0
推荐指数
1
解决办法
60
查看次数

Libtool输出"未知选项字符-o"错误

所以我有一个.o文件目录,我试图使用libtool输出到静态库.

从包含所有.o文件的目录中,我执行以下操作,其中mylibrary.a位于父目录中

$ libtool  -static *.o -output ../mylibrary.a
Run Code Online (Sandbox Code Playgroud)

但是我一直收到以下错误:

unknown option character `o' in: -output
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?我在mac osx终端上做这一切

macos terminal xcode static-libraries libtool

0
推荐指数
1
解决办法
596
查看次数

无法从Makefile链接静态库

我构建了一个静态库.问题是我无法从我的Makefile链接它

TARGET  =       AR1020
CC      =       gcc
CFLAGS  =       -Wall -std=c99 -I./inc/
LINKER  =       gcc -o
LFLAGS  =       -Wall -static -I./inc/


SRCDIR  =       src
INCDIR  =       inc
OBJDIR  =       obj
BINDIR  =       bin

LIBDIR  =       ./lib
LIBFLAG =       -li2c


SOURCES         :=      $(wildcard $(SRCDIR)/*.c)
INCLUDES        :=      $(wildcard $(INCDIR)/*.h)
OBJECTS         :=      $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
rm              =       rm -f

$(BINDIR)/$(TARGET): $(OBJECTS)
        @$(LINKER) $@ $(LFLAGS) -L$(LIBDIR) $(LIBFLAG) $(OBJECTS)
        @echo "Linking complete!"

$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
        @$(CC) $(CFLAGS) -c $< -o $@
        @echo "Compiled "$<" successfully"

.PHONY: …
Run Code Online (Sandbox Code Playgroud)

c linux gcc makefile static-libraries

0
推荐指数
1
解决办法
980
查看次数

C中静态库中的函数声明

当我尝试使用静态库编译程序时,我遇到了问题.我创建了我的.c文件的目标文件gcc -c ft_putstr.c.然后我执行ar -rcs libft.a ft_putstr.o,然后我做gcc main.c -L. -lft,我

警告:函数'ft_putstr'的隐式声明在C99中无效.

二进制文件已创建但我不想要这个警告,即使它是这样的.如果我-std="c89"在GCC上有旗帜但我使用C99就可以了.

这是我的主要内容:

int main(void)
{
     ft_putstr("Bonjour");
     return (0);
}
Run Code Online (Sandbox Code Playgroud)

这是我的ft_putstr.c:

#include <unistd.h>

    void    ft_putstr(char *str) 
    {
         (*str) ? write(1, str, 1), ft_putstr(str + 1) : 0; 
    }
Run Code Online (Sandbox Code Playgroud)

c gcc static-libraries unix-ar compiler-warnings

0
推荐指数
1
解决办法
1340
查看次数

C++静态库

除了包含第三方软件之外,为什么要为项目创建静态库.如果您自己编写源代码,那么您可以将其构建为项目的一部分,如果它是一个不止一次使用的库,那么动态链接和坐在运行时库上会不会更有意义?

c++ dll linker shared-libraries static-libraries

0
推荐指数
1
解决办法
80
查看次数

C - 如何以编程方式加载Win32中的静态库?

我需要能够在我的主应用程序中的静态库中的函数和我的重写版本之间切换.为此,我正在尝试使用函数指针.问题是我不知道如何将静态库加载到我的程序中.这可能吗?或者我必须使用DLL?

c windows dll static-libraries

0
推荐指数
1
解决办法
56
查看次数