在文章 采用dsapi开发domino登录认证 中记录了windows平台如何开发domino登陆认证动态库,本篇将记录如何将该源码移植到Linux平台,编译出Linux平台支持的动态链接库so文件。
1、Linux平台编译环境配置
本人采用的Linux系统是centos7,版本号如下:
采用gcc进行程序的编译,gcc通过如下方式安装:
[zhl@localhost ~]#yum install gcc
[zhl@localhost ~]#yum install gcc-c++
新装的centosCentOS 默认已经安装了yum,使用yum工具安装软件时,需要事先配置yum源,配置方式如下:
[zhl@localhost ~]#cd /etc/yum.repos.d/
#安装repo源
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
mv CentOS7-Base-163.repo CentOS7-Base.repo
yum clean all
yum makecache
#安装epel源
[zhl@localhost ~]#yum install epel-release
[zhl@localhost ~]#yum makecache
#检测是否安装成功
[zhl@localhost ~]#yum repolist
yum源配置好后,如下图:
2、Linux平台domino9.0安装环境配置
本人使用的是centos7的图形界面,所以安装较为简单,domino9.0安装的过程如下。
2.1domino9.0安装 操纵系统环境配置
1)关闭SELinux
#查看状态
[zhl@localhost ~]#getenforce
#关闭SELinux,修改SELINUX=disabled
[zhl@localhost ~]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
#使修改生效
[zhl@localhost ~]# setenforce 0
2)禁用不必要的服务
#检查已开启的服务
[zhl@localhost ~]#chkconfig -list|grep on
#禁用不必要的服务
[zhl@localhost ~]#chkconfig ip6tables off
[zhl@localhost ~]#chkconfig postfix off
[zhl@localhost ~]#chkconfig cups off
3)安装必备软件
#安装kernel-devel和kernel-headers,并且在更新时,禁止更新kernel
[zhl@localhost ~]#yum -y install kernel-devel kernel-headers&&echo exclude=kernel*>>/etc/yum.conf
#安装Domino及系统管理所需软件
[zhl@localhost ~]#yum -y install rsync wget ftp nmap yum-utils nfs-utils portmap zip unzip perl
#更新所有软件
[zhl@localhost ~]#yum -y update
2.2 domino软件安装
1)domino官网下载,网址如下:domino官网
2)上传到centos
本人是在windows环境下对domino进行的下载,所以需要将文件传送到centos中,采用ssh进行传输文件,windows采用PuTTY工具作为ssh的客户端,文件传输过程如下
c:\Program Files\PuTTY>psftp
psftp: no hostname specified; use "open host.name" to connect
psftp> open 192.168.5.130
login as: root
root@192.168.5.130`s password:
Remote working directory is /root
psftp> put C:/users/zhl/Downloads/DOMI_SRV_901_LINUX32_EN_FULL_TRIAL.tar /home/zhl/Desktop
3)安装的domino环境设置
#创建notes账号
[zhl@localhost ~]#groupadd notes
[zhl@localhost ~]#useradd -g notes notes
[zhl@localhost ~]#passwd notes
[zhl@localhost ~]#su notes
#添加domino环境变量
[zhl@localhost ~]#vim /home/notes/.bash_profile
PATH=$PATH:$HOME/bin:/opt/ibm/domino/bin:/notesdata
echo "export DOMINO_LINUX_SET_PARAMS=1" >> /home/notes/.bashrc
#增加domino可用的文件句柄
[zhl@localhost ~]#ulimit -n 2000
#在/etc/security/limits.conf最后添加如下语句
[zhl@localhost ~]#vim /etc/security/limits.conf
notes soft nofile 65535
notes hard nofile 65535
4)安装domino
[zhl@localhost Desktop]tar xvf DOMI_SRV_901_LINUX32_EN_FULL_TRIAL.tar
[zhl@localhost Desktop]cd linux64/domino
[zhl@localhost Desktop]./install
会弹出安装界面,之后按默认,点击下一步直到完成即可。
3、编译linux平台下的源码
由于本人基本对linux下的源码编译不是很熟悉,对gcc、makefile了解也一般,幸好visual studio提供Linux c++开发工具,因此本人采用windows下的visual studio2017作为开发平台,采用其LinuxC++工具远程连接到本人的centos系统进行编译,整个源码移植过程如下。
3.1、项目配置
1)新建项目选择 跨平台 》Linux 》 空项目(Linux)
2)拷贝源码
拷贝源码后如下图:
3)设置编译属性
选择配置类型为 动态库(so),目标文件拓展名修改为 .so
设置C/C++》常规
在C/C++》命令行 其他选项中 填入如下指令:
-c -I/usr/local/include/g++ -I/usr/include/g++ -O -w -m64 -DGCC3 -DGCC4 -fno-strict-aliasing -DGCC_LBLB_NOT_SUPPORTED -Wformat -Wall -Wcast-align -Wconversion -DUNIX -DLINUX -DLINUX86 -DND64 -DW32 -DLINUX64 -DW -DLINUX86_64 -DDTRACE -DPTHREAD_KERNEL -D_REENTRANT -DUSE_THREADSAFE_INTERFACES -D_POSIX_THREAD_SAFE_FUNCTIONS -DHANDLE_IS_32BITS -DHAS_IOCP -DHAS_BOOL -DHAS_DLOPEN -DUSE_PTHREAD_INTERFACES -DLARGE64_FILES -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DNDUNIX64 -DLONGIS64BIT -DPRODUCTION_VERSION -DOVERRIDEDEBUG -fPIC
如下图:
设置链接器》常规》附加库目录(该目录设置的是centos下的源码使用到的动态链接库的目录,因为vs2017 LinuxC++工具编译链接的时候都是远程登陆到centos系统中的,所以需要设置为centos的库所在的目录)
设置链接器》输入》库依赖项
注: linux下链接的时候 g++ 链接的库格式为 lib+库名+.so,所以配置的库依赖项log4cplus,实际去找的动态库名是 liglog4cplus.s
注:上述C/C++ 输入 设置的是window下的路径,为了保证程序阅读的时候没有错误,但是程序编译的时候,真实的是在CentOS中运行的,所以必须在CentOS中配置好头文件的引入路径才行。
CentOS中C/C++编译时默认头文件是在/usr/local/include中寻找的,所以我们需要将头文件放入该目录。
3.2、CentOS中程序使用到的库配置
本dsapi程序用到了log4cplus库和domino的notes库,现记录如下
1)log4cplus安装
从http://sourceforge.net/projects/log4cplus/files/log4cplus-stable/ 下载最新版本的log4cplus,本人下载的是log4cplus-1.2.1.tar.bz2,下面记录log4cplus的安装
#用PuTTY中的psftp工具将log4cplus-1.2.1.tar.bz2上传到centos中
c:\Program Files\PuTTY>psftp
psftp: no hostname specified; use "open host.name" to connect
psftp> open 192.168.5.130
login as: root
root@192.168.5.130`s password:
Remote working directory is /root
psftp> put C:/users/zhl/Downloads/Dlog4cplus-1.2.1.tar.bz2 /home/zhl/Desktop
/log4cplus-1.2.1.tar.bz2
#解压log4cplus-1.2.1.tar.bz2
[zhl@localhost Desktop]#tar -xjf log4cplus-1.2.1.tar.bz2
[zhl@localhost Desktop]#cd log4cplus-1.2.1/
#安装
[root@localhost log4cplus-1.2.1]# ./configure
[root@localhost log4cplus-1.2.1]# make
[root@localhost log4cplus-1.2.1]# make install
通过上述步骤,log4cplus的头文件自动放入到了/usr/local/include下,log4cplus动态连接库自动放在了/usr/lcoal/lib下。
2)domino c++ api库
domino C++ 开发包需要从官网https://www.ibm.com/developerworks/develop/collaboration/中下载 IBM C API Toolkit for Notes and Domino
下载好后解压缩,将其中的include文件夹通过psftp放入centos的/usr/local/include文件夹下
psftp> put -r C:\Users\zhl\Documents\domino\C_API_TKT_NOTDOM_901AIXEN\notesapi901\include /usr/local/include/dsapi
虽然IBM C API Toolkit for Notes and Domino的工具包中有lib文件夹,并且里面有不同操作系统的lib文件,但是linux版本的文件夹里是notes0.o、notessai.o两个文件,本人是linux下编译程序的新手,尝试多次无法实现程序的链接,所以放弃使用C API Toolkit中的lib文件,而是在domino的安装目录下找到了libnotes.so的动态链接库并且链接成功,该libnotes.so文件的位置在/opt/ibm/domino/notes/90010/linux目录下面。
程序编译成功输出如下图