linux下C语言实现excel文件导入到数据库 动态库libxl.so用法

redcisco 2015-11-27 06:25:41
各位好:
我想实现linux下C语言实现excel文件导入到数据库这样需求。
我拿到libxl-3.6.5.0 官网提供http://www.libxl.com/ 仿照例子 我却不能实现:
源代码:Code example: extract data from an existing spreadsheet
#include <stdio.h>
#include "libxl.h"
#include <stdlib.h>
#include <string.h> /后来排错添加的
#include <wchar.h> //后来排错添加的
#include <stdbool.h> /后来排错添加的
int main()
{
BookHandle book = xlCreateBook();
if(book)
{
if(xlBookLoad(book, "example.xls"))
{
SheetHandle sheet = xlBookGetSheet(book, 0);
if(sheet)
{
double d;
const char* s = xlSheetReadStr(sheet, 2, 1, 0);

if(s) printf("%s\n", s);

d = xlSheetReadNum(sheet, 3, 1, 0);
printf("%g\n", d);
}
}
xlBookRelease(book);
}
return 0;
}
——————————————————————————————————————
我的makefile文件如下:
#编译路径
SETTLE_MAIN = /settle/jingy
PATHROOT = /settle/jingy
PATHMAIN = ${PATHROOT}/xls_test
PATHBIN = ${PATHMAIN}/bin
PATHINC = ${PATHMAIN}/inc

PATHSRC = ${PATHMAIN}/src
PATHOBJ = ${PATHMAIN}/obj
PATHDB = $(PATHMAIN)/db

CC=gcc
ARCH = $(shell getconf LONG_BIT)
ifeq ($(ARCH), 32)
LIBPATH = $(PATHMAIN)/lib
else
LIBPATH = $(PATHMAIN)/lib64
endif

CFLAGS = -I $(PATHMAIN)/include_c -L $(LIBPATH)/libxl.so -lxl -Wl,-rpath,$(LIBPATH)/libxl.so
all: $(PATHBIN)/xls_test
$(PATHBIN)/xls_test:$(PATHSRC)/xls_test.c
$(CC) -o $(PATHBIN)/xls_test $(PATHSRC)/xls_test.c $(CFLAGS)
clean:
rm -f $(PATHBIN)/xls_test *.xls *.xlsx
——————————————————————————————————————
目录结构:
总计 52
drwxr-xr-x 2 app_usr staff 4096 11-27 14:36 inc/
drwxr-xr-x 2 app_usr staff 4096 11-27 15:02 db/
drwxr-xr-x 2 app_usr staff 4096 11-27 15:02 src/
drwxr-xr-x 2 app_usr staff 4096 11-27 15:26 lib-2/
drwxr-xr-x 2 app_usr staff 4096 11-27 15:38 include_c/
drwxr-xr-x 2 app_usr staff 4096 11-27 15:38 lib/
drwxr-xr-x 2 app_usr staff 4096 11-27 15:38 include_cpp/
drwxr-xr-x 2 app_usr staff 4096 11-27 15:38 lib64/
-rw-r--r-- 1 app_usr staff 2160 11-27 16:33 clean
drwxr-xr-x 2 app_usr staff 4096 11-27 16:35 obj/
-rw-r--r-- 1 app_usr staff 2543 11-27 18:05 makefile-1
-rw-r--r-- 1 app_usr staff 619 11-27 19:28 makefile
drwxr-xr-x 2 app_usr staff 4096 11-27 19:28 bin/
[app_usr@jstest16 xls_test]$
出错信息如下:
[app_usr@jstest16 xls_test]$ make
gcc -o /settle/jingy/xls_test/bin/xls_test /settle/jingy/xls_test/src/xls_test.c -I /settle/jingy/xls_test/include_c -L /settle/jingy/xls_test/lib64/ -lxl -Wl,-rpath,/settle/jingy/xls_test/lib64/
/settle/jingy/xls_test/lib64//libxl.so: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)@GLIBCXX_3.4.9'
/settle/jingy/xls_test/lib64//libxl.so: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::basic_ostream<char, std::char_traits<char> >::_M_insert<long long>(long long)@GLIBCXX_3.4.9'
/settle/jingy/xls_test/lib64//libxl.so: undefined reference to `std::basic_istream<wchar_t, std::char_traits<wchar_t> >& std::basic_istream<wchar_t, std::char_traits<wchar_t> >::_M_extract<unsigned short>(unsigned short&)@GLIBCXX_3.4.9'
/settle/jingy/xls_test/lib64//libxl.so: undefined reference to `std::basic_ostream<wchar_t, std::char_traits<wchar_t> >& std::basic_ostream<wchar_t, std::char_traits<wchar_t> >::_M_insert<double>(double)@GLIBCXX_3.4.9'
/settle/jingy/xls_test/lib64//libxl.so: undefined reference to `std::basic_ostream<wchar_t, std::char_traits<wchar_t> >& std::basic_ostream<wchar_t, std::char_traits<wchar_t> >::_M_insert<unsigned long long>(unsigned long long)@GLIBCXX_3.4.9'
/settle/jingy/xls_test/lib64//libxl.so: undefined reference to `std::ctype<char>::_M_widen_init() const@GLIBCXX_3.4.11'
/settle/jingy/xls_test/lib64//libxl.so: undefined reference to `std::basic_ostream<wchar_t, std::char_traits<wchar_t> >& std::__ostream_insert<wchar_t, std::char_traits<wchar_t> >(std::basic_ostream<wchar_t, std::char_traits<wchar_t> >&, wchar_t const*, long)@GLIBCXX_3.4.9'
————————————————————————————
请朋友教我:1.libxl.so是否正确使用 2.编译出错基本原因 3.需求实现的其他案例链接
谢谢!
...全文
539 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
redcisco 2015-11-28
  • 打赏
  • 举报
回复
感谢楼上提示:
[app_usr@jstest16 lib64]$ ldd -r libxl.so
ldd: warning: you do not have execution permission for `./libxl.so'
./libxl.so: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./libxl.so)
./libxl.so: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./libxl.so)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002aee5f7eb000)

[app_usr@jstest16 ~]$ cd /settle/oracle_bak/11.2/client_1/lib/stubs/
[app_usr@jstest16 stubs]$ strings libstdc++.so.6 | grep "GLIBC"
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
[app_usr@jstest16 stubs]$
解决方案 下载最新lib。
ps 现在思路是改一下功能实现的方式。
橘风之轮 2015-11-27
  • 打赏
  • 举报
回复
libxl-3.6.5.0库中有未定义符号 ldd -r libname

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧