小编SSC*_*SSC的帖子

如何使用pkg-config静态链接库

我想静态链接pkg-config找到的libpng.

pkg-config --libs --static libpng
Run Code Online (Sandbox Code Playgroud)

输出

-L/usr/local/Cellar/libpng/1.6.15/lib -lpng16 -lz

libpng16.a libpng16.dylib在这个目录中都有,如果我使用这些标志,库就会动态链接.

我怎么能告诉pkg-config或链接器(最好是以某种便携式方式),我真的希望它静态链接?

我尝试-static在pkg-config的标志之前添加,但这使得clang ld尝试并且无法链接"crt0.o".

pkg-config static-linking

7
推荐指数
3
解决办法
9650
查看次数

当我将它分配给std :: string时,我可以释放char*字符串的内存吗?

我将它转换为std :: string后,是否可以释放char*指向字符串的内存?例如:

char* c_string;
c_string = strdup("This is a test");
std::string cpp_string;
cpp_string(c_string);
free(c_string); /* can I call free here? */
Run Code Online (Sandbox Code Playgroud)

c++ string free stdstring

6
推荐指数
2
解决办法
1326
查看次数

如何调试加载共享库

我有一个使用uclibc在MIPS CPU上运行的多进程程序,它使用gcc 4.5.3编译.其中一个进程(名称为"tv")需要链接一个共享库(libtest.so),这也是我编写的."tv"进程用C++编写,libtest.so用C编写.

我也从libtest.so转储elf头,它同时设置了PIC和CPIC标志,所以我认为库的创建是可以的.

当我尝试运行程序时,除了"tv"进程外,所有进程都启动正常.没有错误消息.当我使用ps检查它的状态时,它已成为一个僵尸进程.

我尝试了以下内容

  1. 如果我从链接进程中删除了libtest.so,并删除了对libtest.so的任何引用,那么"tv"进程可以毫无问题地运行.

  2. 如果我删除对libtest.so的任何引用但是在链接过程中保留libtest.so,那么"tv"进程仍然无法运行.

  3. 我试图使用LD_DEBUG = all进行调试,但由于没有有效的输出,它在我的主板上不起作用.

因此我猜想当"tv"进程启动时,当ld尝试加载libtest.so时会出现问题.但我不知道如何调试?我该如何判断libtest.so的哪一部分是否导致问题?

任何建议都是受欢迎的.提前致谢.

c c++ debugging gdb remote-debugging

5
推荐指数
1
解决办法
410
查看次数

如何在不使用system,popen,fork,exec的情况下在C/Linux中执行外部命令?

我想知道是否有任何好的方法在Linux环境中使用C语言执行外部命令而不使用system(),popen(),fork(),exec()?

我无法使用这些功能的原因是我的主应用程序耗尽了我的嵌入式主板中的大部分系统资源(即内存).如果我做一个分支,董事会将无法创建我的主应用程序的副本.从我在书中读到,system()和popen()实际上都在下面使用fork(),所以我也不能使用它们.

我目前唯一的想法是在运行我的主应用程序之前创建一个进程并使用IPC(管道或套接字)让新进程知道它需要使用system()或popen()运行哪些外部命令并返回结果完成后我的申请.

c linux fork

4
推荐指数
1
解决办法
1282
查看次数

使用Python 3.4.1导入http.client encouter导入错误

我正在按照python在线文档(21.12.3)中的示例进行练习.当我尝试使用Run Module(F5)运行我的脚本时,我总是遇到导入错误.但是如果我直接在IDLE命令行中输入它们,python就不会抱怨.我不确定我做错了什么.

我正在使用的python版本是win32上的Python 3.4.1(v3.4.1:c0e311e010fc,2014年5月18日,10:38:22)[MSC v.1600 32位(英特尔)]

脚本是

import http.client

conn = http.client.HTTPConnection("192.168.1.2", 8080)
conn.request("GET", "/index.html")
r1 = conn.getresponse()
print(r1.status, r1.reason)
conn.close()
Run Code Online (Sandbox Code Playgroud)

错误消息是

Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 2218, in _find_and_load_unlocked
AttributeError: 'module' object has no attribute '__path__'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\User\Downloads\http.py", line 1, in <module>
    import http.client
  File "D:\User\Downloads\http.py", line 1, in <module>
    import http.client
ImportError: No module named 'http.client'; 'http' is not a …
Run Code Online (Sandbox Code Playgroud)

python python-import python-3.x

4
推荐指数
2
解决办法
9904
查看次数

在double类型数组中使用memset()

我想将所有索引值设置-1为双数组.
这是我的代码:

double dp[505];
memset(dp,-1,sizeof(dp));
cout<<dp[0]<<"\n";
Run Code Online (Sandbox Code Playgroud)

但是nan当我试图打印它的价值时,它就显示出来了.

什么nan意思?可以memset()在双数组中使用吗?

c++

2
推荐指数
3
解决办法
1万
查看次数

我在mergesort中传递此数组的方式有什么问题?

当我尝试对我传递的数组做任何事情时,我得到了段错误.我可能正在做一些简单的愚蠢错误,但我没有看到它.

合并通话:

merge(&(array[size]), 0, size-1);
Run Code Online (Sandbox Code Playgroud)

合并

void merge(people* pe,int low,int high)
{   //cout<< pe[0].fname << endl;  
    if(low < high)
    {   int mid = (low+high)/2;
        merge(pe, low, mid);
        merge(pe, mid+1, high);
        mymerge(pe, low, mid, high);
    }
}
Run Code Online (Sandbox Code Playgroud)

我进入那个cout,看看我是否可以访问那里的阵列,我立即得到了一个段错误.我在那里做错了什么?(我可以输出array [0] .fname,这样结构数组本身就没有问题)

c++ arrays parameters mergesort

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