VS2017 Linux C++引用自定义的动态库

前一篇博客讲了用系统库libpthread.so的例子,只需要在项目属性页的[C++->命令行参数]和[链接器->命令行参数]中加上对应参数(比如-pthread)即可,然后我试着引用自己的库(libTLPI.so,放在/lib目录下),然后在命令行参数后面加上-lTLPI,发现无法引用自定义的动态库,undefined reference错误。

在网上找了很久,都没找到解决方案,最后还是官方周到,在VS首页的教程中就有

因为之前配置过opengl,所以立刻看出来GL、GLU、glut代表的是opengl的三个.so文件(libGL.so、libGLU.so、libglut.so),然后我就发现被VS的描述坑了

我还以为这里的库依赖项只能输入静态库呢,原来是我一时眼快……前缀为lib的就是动态库libxxx.so,我第一眼还以为是windows的静态库xxx.lib,因为以前配置opencv的时候套路都是在[链接器->输入]中输入静态库(*.lib文件)的名字,然后动态库(*.dll)直接通过环境变量来查找。

而远程调试Linux的话,动态库libxxx.so和静态库xxx.a都是在[链接器->输入]里配置(囧)

于是,在[C++->命令行参数]、[链接器->命令行参数]中也不必要去加-lTLPI选项了。

最后精简了代码,编译运行成功,到了这一步终于可以用VS完全取代Linux下直接开发了(也不尽然,远程操控相比本地直接用命令编译速度还是慢点的)

时间: 2024-12-15 01:49:36

VS2017 Linux C++引用自定义的动态库的相关文章

indy openssl lazarus 编程linux下出现不能装载动态库的问题原因!

版本不对的原因. 具体在10.5.9下修改此参数即可解决问题. LoadFunction() has an ACritical parameter. It is set to True by default, but can be set to False for individual functions (and currently is False for TLS 1.1+ and DTLS functions). You can patch IdSSLOpenSSLHeaders.pas

如何让linux加载当前目录的动态库

debian从7.0开始支持multiarch,64位库的路径改到/usr/lib/x86_64-linux-gnu了,mint.ubuntu这些衍生版有没有跟着改我就不清楚了. deepin linux 是基于debian的,所以库路径也是/usr/lib/x86_64-linux-gnu # 如何让linux加载当前目录的动态库 --------------------------- linux的excutable在执行的时候缺省是先搜索/lib和/usr/lib这两个目录,然后按照ld.s

Linux下gcc编译控制动态库导出函数小结

Linux下gcc编译控制动态库导出函数小结 来源 https://www.cnblogs.com/lidabo/p/5703890.html 根据说明文档“How To Write Shared Libraries"介绍, 有四种方法: 1. 在方法声明定义时,加修饰:__attribute__((visibility("hidden"))) 就是说将不公开的函数都加上这个属性,没加的就是可见的 2. gcc 在链接时设置 -fvisibility=hidden,则不加 v

在linux下制作libxxx.so 动态库

在linux下面动态库的使用是非常常用的,也是非常实用的. 步骤一: 创建一个.h头文件 ,头文件中声明动态库中的函数 #ifndef _TEST_H_ #define _TEST_H_ #ifdef __cplusplus /*c c++ 混合编程*/ extern "C" { #endif <span style="font-family: Arial, Helvetica, sans-serif;">/*c c++ 混合编程*/</span&

linux下,一些关于动态库的问题:

程序运行是加载动态库的几种方法: 第一种,通过ldconfig命令    ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令它,ldconfig命令通常在系统启动时运行,而当一个用户安装我新的动态库时,就需要手工运行这个命令.ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(

Linux 生成可以调试的动态库(单步调试)

我们经常需要调试自己的动态库,但是不能跟踪到库的函数内部,按照下面的方法可以解决这个问题. 1.gcc -c -fPIC   src.c -g -rdynamic 2.gcc -shared -o libtest.so  src.o 这样其它工程在调用时库 libtest.so就可以在单步调试时,跟踪到库内部. 见下面例子: =======================生成动态库====================== =====================测试生成的库========

Linux的nm命令查看动态库和静态库中的符号

功能 列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等.所谓符号,通常指定义出的函数,全局变量等等. 使用 nm [option(s)] [file(s)] 有用的options: -A 在每个符号信息的前面打印所在对象文件名称: -C 输出demangle过了的符号名称: -D 打印动态符号: -l 使用对象文件中的调试信息打印出所在源文件及行号: -n 按照地址/符号值来排序: -u 打印出那些未定义的符号: 常见的符号类型: A 该符号的值在今后的链接中将不再改变

linux下C语言编程动态库so的编写及调用

//test_so.h #include <stdio.h> void test_a(); void test_b(); //test_a.c #include "so_test.h" void test_a() { printf("this is in test_a...\n"); } //test_b.c #include "so_test.h" void test_b() { printf("this is in te

【转】分析Linux和windows动态库

原文地址:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系 统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理.但不同操作系统的动态库由 于格式不同,在需要不同操作系统调用时需要进行动态库程序移植.本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Lin