如何在linux中添加graphviz库?

时间:2014-03-15 15:24:24

标签: c graphviz dot

我正在尝试使用点创建图表。但是,似乎无法识别固定大小等属性。因此,我正在尝试添加graphviz库,但我不知道如何使用.deb文件并在C中使用私有库。这是我的代码,其中fixedsize属性不起作用。我希望调整节点中的文本并使节点大小相同。

digraph test
{
    rankdir = LR;
    "Activity" [shape=circle;fixedsize="true";width=.5;height=.5;fontsize=5];
    "onCreate()" [shape=circle;fixedsize="true";width=.5;height=.5;fontsize=5];
    "Activity" -> "onCreate()"
    "onCreate()" [shape=circle;fixedsize="true";width=.5;height=.5;fontsize=5];
    "onStart()" [shape=circle;fixedsize="true";width=.5;height=.5;fontsize=5];
    "onCreate()" -> "onStart()"
    "onStart()" [shape=circle;fixedsize="true";width=.5;height=.5;fontsize=5];
    "onResume()" [shape=circle;fixedsize="true";width=.5;height=.5;fontsize=5];
    "onStart()" -> "onResume()"
    "Activity" [shape=circle;fixedsize="true";width=.5;height=.5;fontsize=5];
    "Activity Running" [shape=circle;fixedsize="true";width=.5;height=.5;fontsize=5];
    "Activity" -> "Activity Running"
}

2 个答案:

答案 0 :(得分:0)

这不是fixedsize属性的工作原理:

  

如果 false ,节点的大小由包含其标签所需的最小宽度和高度决定。

     

如果 true ,则节点大小仅由width和height属性的值指定,并且不会展开以包含文本标签。如果标签(带边距)不符合这些限制,则会出现警告

     

如果fixedsize属性设置为 shape ,则width和height属性也会确定节点形状的大小,但标签可能会大得多。 [...]如果标签太大,则会给出无警告

永远不会调整文本大小以适应节点,如果文本不符合形状大小,则只能发出警告(使用fixedsize=true)。

您可以解析警告并减少相关节点的字体大小,直到没有警告为止。

答案 1 :(得分:0)

对于使用库,您需要安装开发包。APT system中的开发包,命名为yourpackage-dev,为您的答案,Debian repository具有:graphviz-dev 包。 但是当您使用额外的库进行编译时:

每个plibrary都有一个soname,如pthread,请查看以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *print_message_function( void *ptr );

main()
{
     pthread_t thread1, thread2;
     const char *message1 = "Thread 1";
     const char *message2 = "Thread 2";
     int  iret1, iret2;

    /* Create independent threads each of which will execute function */

     iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1);
     iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2);

     /* Wait till threads are complete before main continues. Unless we  */
     /* wait we run the risk of executing an exit which will terminate   */
     /* the process and all threads before the threads have completed.   */

     pthread_join( thread1, NULL);
     pthread_join( thread2, NULL); 

     printf("Thread 1 returns: %d\n",iret1);
     printf("Thread 2 returns: %d\n",iret2);
     exit(0);
}

void *print_message_function( void *ptr )
{
     char *message;
     message = (char *) ptr;
     printf("%s \n", message);
}

编译代码:

mohsen@debian:~$ gcc pthread.c 
/tmp/cchaTHSA.o: In function `main':
pthread.c:(.text+0x39): undefined reference to `pthread_create'
pthread.c:(.text+0x61): undefined reference to `pthread_create'
pthread.c:(.text+0x79): undefined reference to `pthread_join'
pthread.c:(.text+0x8d): undefined reference to `pthread_join'
collect2: error: ld returned 1 exit status

你看到我从链接器收到错误,因为它需要我引入它pthread库,如:

mohsen@debian:~$ gcc -lpthread pthread.c 
mohsen@debian:~$ ./a.out 
Thread 1 
Thread 2 
Thread 1 returns: 0
Thread 2 returns: 0
mohsen@debian:~$ 

-lLIBRARY_NAME向gcc介绍了一个库。