在普通的C语言中,如果您希望将函数或者变量限制在当前文件中,需要对其使用static关键字。然而,在一个包含很多文件的共享库中,如果您希望某个符号可以被共享库内部的几个文件访问,而又不提供给外部,则对符号进行隐藏处理就会比较困难。大多数的连接器都提供一些便利的方法来隐藏或者显示模块中所有的符号,但如果希望更加具有选择性,则需要更多的处理。
查看全文: 控制符号的可见性»
无论是C的编译还是C++编译,以及Perl或者Java的编译都可以通过make来完成。
[lijunlia@cadev08 Extractors]$gcc `mysql_config --libs` t.c -o t测试代码如下:
/tmp/ccMQ3Odc.o(.text+0x22): In function `main':
: undefined reference to `mysql_init'
/tmp/ccMQ3Odc.o(.text+0x4d): In function `main':
: undefined reference to `mysql_real_connect'
/tmp/ccMQ3Odc.o(.text+0x62): In function `main':
: undefined reference to `mysql_error'
collect2: ld returned 1 exit status
[lijunlia@cadev08 Extractors]$more t.c换了一种方式:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
int main(int argc, char *argv[])
{
MYSQL *conn;
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, "localhost", "root", "", "bcm", 3306, NULL, 0))
{
printf("%s\n", mysql_error(conn));
return -1;
} else {
printf("Connect Successfull!!\n");
}
mysql_close(conn);
return 0;
}
[lijunlia@cadev08 Extractors]$gcc t.c `mysql_config --libs` -o t运行测试文件:
[lijunlia@cadev08 Extractors]$gcc --version
gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-9)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[lijunlia@cadev08 Extractors]$./t开始还一直以为是mysql库安装问题或者lib等问题,后来才意识的这个gcc问题。
Connect Successfull!!
这里主要讲述在PHP及Zend框架下怎么使用Zend API和C++语言来实现自己所要的功能以及项目的开发。
此篇文章所运用的环境在Linux 2.4.21-4.ELsmp(Red Hat Linux
3.2.3-20),Apache/2.2.8,gcc version 3.2.3 20030502,PHP 5.2.5 (cli),Zend
Engine v2.2.0下进行。
此篇文章准备分2个部分来讲述:
第一部分主要详细讲述一下怎么构建一个完成的C++应用扩展模块;
第二部分主要讲述在PHP及Zend框架下怎么使用Zend API和C++语言来实现自己所要的功能以及项目的开发;
此篇文章所运用的环境在Linux 2.4.21-4.ELsmp(Red Hat Linux 3.2.3-20),Apache/2.2.8,gcc version 3.2.3 20030502,PHP 5.2.5 (cli),Zend Engine v2.2.0下进行。
#gcc -c *.c-E Preprocess only; do not compile, assemble or link
#ar cq libtest.a *.oar create, modify, and extract from archives
#gcc -shared -fPIC -DPIC -c *.cgcc:
#ld -shared *.o -o libtest.so.1.0or
#ld -shared -soname libtest.so.1 -o libtest.so.1.0 -lc libtest.old:
#ln -sf libtest.so.1.0 libtest.soLD_LIBRARY_PATH 这个环境变量指示动态连接器可以装载动态库的路径。
#gcc test.c -L. -ltest -o test